NSMutableArray の removeObjectAtIndex で落ちる
NSArray を NSMutableArray にキャストした配列に対して要素を削除しようとすると落ちてしまいます。
1 2 |
NSMutableArray *array = (NSMutableArray *)[NSArray arrayWithObjects:@"マエケン", @"バリントン", @"野村", @"大瀬良", @"誰か", nil]; [array removeObjectAtIndex:1]; |
などとすると
1 |
[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance xxxxxxxx |
というエラーになります。
正確にはキャストできない
このエラーは 『NSArray のインスタンスに対して、removeObjectAtIndex は呼び出せませんよ』という事のようです。
どうやらこのキャストはコンパイラに型を伝えているだけでインスタンスは NSArray のままのようです。
じゃ、どーすりゃいいの?
mutableCopy してあげましょう
1 2 3 |
NSArray *array = [NSArray arrayWithObjects:@"マエケン", @"バリントン", @"野村", @"大瀬良", @"誰か", nil]; NSMutableArray *marray = (NSMutableArray *)[array mutableCopy]; [marray removeObjectAtIndex:1]; |
これで要素を削除できます。
編集後記
もう一人先発が欲しいな
コメントを残す