【问题标题】:App crash when trying to access a subclass method after the object was initialized ( init ) using the parent initializer使用父初始化程序初始化对象 (init) 后尝试访问子类方法时应用程序崩溃
【发布时间】:2010-09-20 07:39:31
【问题描述】:

我有一个继承 NSMutableArray 的类。

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

MyClass class= [MyClass arrayWithContentsOfFile:path];

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

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

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

有什么想法吗?

【问题讨论】:

    标签: objective-c inheritance


    【解决方案1】:

    NSArray 是一个class cluster。要在类集群中创建新的子类,您必须implement its primitive methods

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      相关资源
      最近更新 更多