我有一个我在谷歌找不到的小问题:
UITableView
工作正常,直到我开始滚动。
Error Message: `-[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x5f24870 `
方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
}
// Set up the cell
int storyIndex = [indexPath indexAtPosition: [indexPath length]-1];
//populate cell
cell.textLabel.text = [[myArray objectAtIndex: storyIndex] objectForKey: @"subject"];
return cell;
}
猜测那是“问题” - 方法......如果您需要更多信息:请告诉我:) 谢谢你的帮助!
编辑:
myArray只是正常NSArray *myArray
这是一个排序的数组 - >
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lesson" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors];
resultArray(NSMutableArray)是XML-Parser的结果..希望你能看到我的问题..
答案 0 :(得分:11)
这意味着您要向objectAtIndex:
类型的对象(或可能NSString
)发送CFString
条消息。当然,你期望myArray
是一个数组,而不是一个字符串。
可能发生的事情是你的阵列被释放(几乎肯定是自动释放的)太早了,到上面的方法被称为 被myArray
指向的内存时现在有一个字符串。
响应您的编辑...
这一行:
myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors];
...不正确。该值是自动释放的。你需要保留它:
myArray = [[resultArray sortedArrayUsingDescriptors:sortDescriptors] retain];
请务必在关闭视图之前将其释放!
答案 1 :(得分:0)
如果您已正确识别此方法为罪魁祸首,我猜这一行就是问题所在:
cell.textLabel.text = [[myArray objectAtIndex: storyIndex] objectForKey: @"subject"];
对我来说,它看起来是石灰myArray
是NSCFString
而不是NSArray
的实例。你应该首先仔细检查那个,然后你永远不会将除NSArray实例之外的任何东西分配给myArray
。
- 编辑 -
尝试
self.myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors];
这应该正确地保留yoy的数组,以确保它不是垃圾收集并用胭脂串代替:)
答案 2 :(得分:0)
myArray可以自行释放。使用self.myArray设置已排序的数组。 (使用正确的@property(保留))
答案 3 :(得分:0)
如果myArray是实例变量而不是属性,请尝试:
myArray = [[resultArray sortedArrayUsingDescriptors:sortDescriptors] retain];