Edited at

NSArray, NSMutableArrayの要素にnilを入れたい

More than 3 years have passed since last update.


はじめに

NSArrayでは要素nilは終端を意味するので、途中に追加することができない。

しかし、条件によってNULLなオブジェクトを要素にしたい場合はある。

Cだったら

char *array[] = { "aaa", NULL, "bbb", NULL, "ccc"};

のようにしたい場合である。


解決方法

NULLを意味するするオブジェクトを返す[NSNull null]を使うとよい

@[@0, @1, [NSNull null], @3, @4]

というのをNSMutableArrayで動的に作りたい場合は

NSArray *someArray = @[@"hoge", @"fuga", [NSNull null], @"hogehoge", nil];

NSMutableArray *mutable = [NSMutableArray array];
for(int i = 0; i < 5; i++) {
if( i != 2 ) {
[mutable addObject:[NSNumber numberOfInt:i];
} else {
[mutable addObject:[NSNull null]];
}
}

とすれば良い

追記

コメントで頂いた通り、nilと[NSNull null]は別物なので、nilと同じようには使えません。

[NSNull null]のオブジェクトにメソッドを呼ぶとクラッシュしてしまうので、

if(obj != [NSNull null])

のようなチェックが必要になります。