nil オブジェクトに関して同じ問題があり、そのためのカテゴリを書きましNS(Mutable)Array
た。したがって、代わりに:
NSMutableArray *array = [[NSMutableArray alloc] init];
if (ob0) [array addObject:ob0];
if (ob1) [array addObject:ob1];
if (ob2) [array addObject:ob2];
if (ob3) [array addObject:ob3];
arrayWithObjectsNil
nil オブジェクトをスキップするために使用できます。
id obs[] = { ob0, ob1, ob2, ob3 }; // Assuming obj1 and obj3 are nil.
NSLog(@"%@", [NSArray arrayWithObjectsNil:obs size:sizeof(obs)]);
> ( 0, 2 )
または、nil オブジェクトを次のように変換するために使用しarrayWithObjectsNull
ます。[NSNull null]
NSLog(@"%@", [NSArray arrayWithObjectsNull:obs size:sizeof(obs)]);
> ( 0, "<null>", 2, "<null>" )
カテゴリを使用すると、可変性を使用して次のように記述することもできます。
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObjectNil:ob0]; // skip, if ob0 is nil
[array addObjectNull:ob1]; // add [NSNull null], if ob1 is nil
...
同じロジックを持つ他のメソッドもあります。
GitHub にNilusという名前のカテゴリがあります。