调用NSMutableArray:addObject导致无法识别的选择器异常

时间:2013-04-08 21:33:41

标签: objective-c

我收到一个无法识别的选择器异常,试图在数组上调用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中分配数组,除非相关。我想理解为什么代码不起作用。谢谢)。< / p>

1 个答案:

答案 0 :(得分:3)

通过使用存储限定符copy而不是strong声明数组,您的可变数组将在赋值时复制并转换为不可变的NSArray。