0

我正在尝试创建一个基于NSMutableArray虚构股票市场持有的对象的类,如果我只是创建一个NSMutableArray.

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

一旦我创建了一个Portfolio基于的类NSMutableArray并将引用更改NSMutableArrayPortfolio

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

XCode 抛出 Thread 1: signal SIGABRT 错误。我一直无法思考导致错误的原因,因为Portfolio该类是 的子类NSMutableArray,如果我什么都不做,只是创建新类,它本质上是NSMutableArray另一个名称,没有其他方法或属性。

任何帮助是极大的赞赏。

4

2 回答 2

0

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

于 2013-06-25T21:10:50.130 回答
0

首先,我赞同迄今为止其他人所说的:子类NSMutableArray化不是最好的方法。一个更好的方法是创建一个名为的对象Portfolio,它是 的子类NSObject,然后NSMutableArray在其中包含一个实例变量。这称为创建复合对象。

话虽这么说,如果您必须子类化NSMutableArray,则必须覆盖五个原始方法。这些是:

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

但是,值得重复:这不是最好的方法。

于 2013-06-25T21:16:29.670 回答