0

我正在尝试在数组上调用 addObject 时遇到无法识别的选择器异常。但是我的数组是 NSMutableArray,而不是 NSArray。我不明白为什么会这样。

我有以下课程:

@interface A : NSObject
@property (nonatomic, copy)     NSMutableArray* children;
- (id) init;
- (void) addChild: (A*) child;
@end

@interface B : A
- (id) init;
@end

@implementation A
- (id) init 
{ 
   self = [super init];
   return self;
} 

- (void) addChild: (A*) child
{
    [self.children addObject:child];
}
@end


@implementation B
-(id) init 
{
    self = [super init];
    if (self != nil)
    {
           self.children = [[NSMutableArray alloc] init];
    }
    return (self);
}

然后,如果我创建一个 B 类型的对象并调用 [b addChild: anObject] 我得到一个无法识别的选择器,我不明白为什么。

输出是:

2013-04-08 14:31:08.046 otest[13381:7e03] -[__NSArrayI addObject:]: unrecognized selector sent to instance 0x17759c0

问题是什么?

TIA

(请关注实际的代码和问题,而不是讨论为什么我不在 A 的 init 中分配数组,除非相关。我想了解为什么现在的代码不起作用。谢谢)。

4

1 回答 1

3

通过使用存储限定符copy而不是声明数组strong,您的可变数组将在分配时被复制并变成不可变的 NSArray。

于 2013-04-08T21:46:22.903 回答