1

私は本当に奇妙な問題を抱えています。可変であると主張し、addObject: に応答すると主張する可変配列がありますが、可変ではないと言ってクラッシュします。

コードは次のとおりです。

NSLog(@"Can add object: %d", [[MySingleton sharedInstance].myArray respondsToSelector:@selector(addObject:)]);
if([[MySingleton sharedInstance].myArray isKindOfClass:[NSMutableArray class]])[[MySingleton sharedInstance].myArray addObject:objectToAdd];
else NSLog(@"Not mutable");

ここで、可変コピーに設定すると機能します。

NSLog(@"Can add object: %d", [[MySingleton sharedInstance].myArray respondsToSelector:@selector(addObject:)]);
if([[MySingleton sharedInstance].myArray isKindOfClass:[NSMutableArray class]])[[MySingleton sharedInstance].myArray.mutableCopy addObject:objectToAdd];
else NSLog(@"Not mutable");

何故ですか?変更可能で addObject: できると主張しているのに、変更可能なコピーを使用しないとクラッシュするのはなぜですか?

4

1 に答える 1

0

これで少しはうまくいくはずです。多分私が十分に書くなら、これは今のところ適切な答えとして出てくるでしょう. 答えはメイン投稿のコメントにあります。isMemberOfClass をチェックして、可変であるが可変メソッドを継承していないため、特定のクラス タイプであるかどうかをチェックするのではなく、クラス メソッドを継承しているかどうかをチェックする必要がありました。

于 2012-06-30T00:19:52.633 に答える