基于NSMutableArray创建一个类导致线程1:信号SIGABRT

时间:2013-06-25 20:40:27

标签: objective-c nsmutablearray

我正在尝试创建一个基于NSMutableArray的类,这些类基于虚构的股票市场资产填充了对象,如果我只是创建一个NSMutableArray,它就有效。

NSMutableArray *portfolio = [NSMutableArray arrayWithObjects: ABC, DEF, GHI, JKL, nil];

根据Portfolio创建名为NSMutableArray的课程,并将NSMutableArray的引用更改为Portfolio

Portfolio *portfolio = [Portfolio arrayWithObjects: ABC, DEF, GHI, JKL, nil];

XCode抛出一个线程1:信号SIGABRT错误。我一直无法思考导致错误的原因,因为Portfolio类是NSMutableArray的子类,如果除了创建新类之外什么都不做,那么它基本上是NSMutableArray名称,没有其他方法或属性。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

NSMutableArray不是一个可以继承的真正的类。它实际上是类集群的一部分,它使它有效地抽象化。您可以创建类集群类的子类,但您需要做几件事。将类创建为NSMutableArray实例的包装器并显式提供适当的方法要容易得多。

答案 1 :(得分:0)

首先,我是其他人到目前为止所说的内容:继承NSMutableArray并不是最好的方法。更好的方法是创建一个名为Portfolio的对象,它是NSObject的子类,然后在其中包含一个NSMutableArray的实例变量。这称为创建复合对象。

话虽如此,如果你必须继承NSMutableArray,你必须覆盖五种原始方法。这些是:

insertObject:atIndex:
removeObjectAtIndex:
addObject:
removeLastObject
replaceObjectAtIndex:withObject:

但是,需要重复一遍:这不是最好的方法。