- [NSCFString objectAtIndex:]:无法识别的选择器

时间:2010-10-18 14:50:50

标签: iphone objective-c cocoa-touch

我有一个我在谷歌找不到的小问题: 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的结果..希望你能看到我的问题..

4 个答案:

答案 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"];

对我来说,它看起来是石灰myArrayNSCFString而不是NSArray的实例。你应该首先仔细检查那个,然后你永远不会将除NSArray实例之外的任何东西分配给myArray

- 编辑 -

尝试

self.myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors];

这应该正确地保留yoy的数组,以确保它不是垃圾收集并用胭脂串代替:)

答案 2 :(得分:0)

myArray可以自行释放。使用self.myArray设置已排序的数组。 (使用正确的@property(保留))

答案 3 :(得分:0)

如果myArray是实例变量而不是属性,请尝试:

myArray = [[resultArray sortedArrayUsingDescriptors:sortDescriptors] retain];