我收到一个无法识别的选择器异常,试图在数组上调用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>
答案 0 :(得分:3)
通过使用存储限定符copy
而不是strong
声明数组,您的可变数组将在赋值时复制并转换为不可变的NSArray。