LoginSignup
1
0

More than 5 years have passed since last update.

NSARRAYをNSMUTABLEARRAYにする時気をつけること

Posted at

取得した配列に要素を追加したい場合、NSMutableArrayを使うわけですが、元のデータがNSArrayであり、そのコピーを元にして要素追加をしようとする際、以下の様なコードを書くとエラーになります。

NSArray *array = @[@"aa",@"bb",@"cc"];

NSMutablueArray *mArray = [[NSMutableArray alloc]init];
mArray = (NSMutableArray*)[array copy];

[mArray addObject:@"aa"] //ここで実行時エラーになる

正しくはこう

NSArray *array = @[@"aa",@"bb",@"cc"];

NSMutablueArray *mArray = [[NSMutableArray alloc]init];
mArray = (NSMutableArray*)[array mutablecopy];

[mArray addObject:@"aa"] //OK

前者でもビルドは通ります。キャストにより「このアドレスのオブジェクトはNSMutableArrayだよー」と言っているわけですから。

ただし、実態はNSArrayのままなので、いざメソッドを呼びだそうとした時にはエラーとなるわけです。

mutablecopyとすることで、NSMutableArrayのオブジェクトになるということです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0