0

我有一个继承 NSMutableArray 的类。

我使用以下方法初始化它:

MyClass 类 = [MyClass arrayWithContentsOfFile:path];

当我尝试访问我的任何子类方法时,应用程序崩溃并出现以下错误:

-[NSCFArray loadCards]:无法识别的选择器发送到实例 0x454a30 * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[NSCFArray > mymethod]:无法识别的选择器发送到实例 0x454a30”应用程序 [32259:20b] 堆栈:( 2524995915,

我怀疑发生这种情况是因为 arrayWithContentsOfFile:path 返回 NSArray 而不是“MyClass”,因此它无法响应我的选择器。

有任何想法吗?

4

1 回答 1

2

NSArray 是一个类 cluster。要在类集群中创建新的子类,您必须实现其原始方法

如果您想要继承数组的行为,那么使用 has-a 关系而不是 is-a 通常会更好。也就是说,编写一个具有 NSArray 实例变量的类,并简单地将相关消息转发给它。

或者,如果你想为 NSArray 添加新的行为,你应该通过直接在category中的 NSArray 类中添加方法来实现。

本质上,如果您想为不同的存储机制提供 NSArray 接口,您基本上只想进行子类化,并且对于该工作,您无论如何都需要实现原始方法。

于 2008-11-01T16:28:08.327 回答