0

配列で addObject を呼び出そうとすると、認識されないセレクタ例外が発生します。ただし、私の配列は NSArray ではなく、NSMutableArray です。なぜこれが起こっているのかわかりません。

私は次のクラスを持っています:

@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

何が問題ですか?

ティア

(関連性のない限り、なぜ A の init に配列を割り当てないのかという副次的な議論ではなく、実際のコードと問題に注目してください。そのままのコードが機能しない理由を理解したいと思います。ありがとうございます)。

4

1 に答える 1

3

copyの代わりにストレージ修飾子を使用して配列を宣言することによりstrong、可変配列は代入時にコピーされ、不変の NSArray に変換されます。

于 2013-04-08T21:46:22.903 に答える