2010-10-18 102 views
2

我有这个小问题,我找不到Google: UITableView工作正常,直到我开始滚动。- [NSCFString objectAtIndex:]:无法识别的选择器

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解析器的结果..希望你能看到我的问题..

+1

如何创建myArray的对象? – Vladimir 2010-10-18 14:56:38

+0

感谢您的意见..见编辑.. – dav3 2010-10-18 15:08:51

回答

11

它取代意味着您正在向NSString类型的对象(或可能是CFString)发送objectAtIndex:消息。当然你期望myArray是一个数组而不是一个字符串。

什么可能的情况是,你的阵列被释放(几乎可以肯定,自动释放)太早,到时候上面的方法调用时正指向由myArray现在拥有一个字符串内存。

在回答您的编辑...

这条线:

myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors]; 

...不正确。该值是自动发布的。您需要保留它:

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

记得在关闭视图之前释放它!

+0

谢谢你=)它现在有效...让我开心=) – dav3 2010-10-18 19:49:20

0

如果你已经正确识别这种方法,我猜这条线的罪魁祸首是这个问题:

cell.textLabel.text = [[myArray objectAtIndex: storyIndex] objectForKey: @"subject"]; 

对我来说,它看起来像石灰myArrayNSCFString的一个实例,而不是NSArray。您应该首先仔细检查一下,并且您从未将除NSArray实例之外的任何内容分配给myArray

- 编辑 -

尝试

self.myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors]; 

这应该正确地保留阵列同比,以确保它不是垃圾收集,并与胭脂串:)

+0

非常感谢,它现在的作品,我非常高兴=) – dav3 2010-10-18 15:19:37

0

myArray proberbly autoreleased。使用self.myArray设置排序后的数组。(用正确的@property(保留))

+0

谢谢你,它的作品=)我很开心=) – dav3 2010-10-18 15:20:02

0

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

myArray = [[resultArray sortedArrayUsingDescriptors:sortDescriptors] retain]; 
相关问题