NSMutableArray子类的Count方法崩溃app

时间:2010-03-02 03:43:09

标签: iphone cocoa

这似乎是一个常见的问题,但我无法从迄今为止看到的答案中找到任何答案。我有一个iPhone应用程序,它使用NSMutableArray的子类来存储对象,以及一些其他属性。子类是skhCustomArray。子类初始化很好,skhCustomArray中没有对象,我将它分配给我的视图控制器的属性,它是指向skhCustomArray的指针。

    prescriptionListVC* newPrescList = [[prescriptionListVC alloc] initWithNibName:@"PrescriptionList" bundle:nil];
    newPrescList.curPersonPrescriptions = [personDetails objectAtIndex:0];

工作正常。然而,当我将我的视图控制器管理的视图推送到导航控制器堆栈时,numberOfRowsInSection方法中的count方法会崩溃应用程序,请参阅下文。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return [curPersonPrescriptions count];

}

可能导致这种情况的原因是什么?没有对象的有效自定义数组如何才能返回有效计数?我哪里错了?感谢。

3 个答案:

答案 0 :(得分:5)

NSArray的子​​类?你知道NSArray是一个class cluster,因此有点难以进行子类化,对吗?事实上,NSArray文档有一个whole section dedicated to what you need to do in order to subclass it非常危险。

我敢打赌,这是你的困境的来源。

答案 1 :(得分:2)

当您继承NSMutableArray时,需要实现一些必需的方法,如count,addObject:,insertObjectAtIndex等。这就是我们所谓的类集群。

如果你想为已经实现的对象添加更多的特性/行为,那么你可以编写一个“类别”而不是“子类化”它。

如果要对其进行子类化,则必须实现所有要使用的方法,以便更好地编写NSMutableArray类别并扩展所需的功能并仅使用NSMutableArray对象。这将解决您的问题,这也是向现有类添加新行为的简单且几乎正确的方法。

答案 2 :(得分:2)

在这种情况下,您几乎肯定不需要继承NSMutableArray。相反,创建一个具有数组作为属性的新类,以及您想要的额外属性。