頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


配列にaddするならnilじゃなくて[NSNull null]

配列(NSMutableArray)にnilを追加しようとして落ちる、というのを時々やってしまいます。
そんな間抜けなことしねーよって方は以下は読まなくても大丈夫です、はい。

試しに、これを実行すると落ちます:
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:0];
[array addObject:@"iPhone 4"];
[array addObject:nil];
[array addObject:@"iPhone 4S"];

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

↑「nil追加してんじゃねーぞ、ゴラァ!」ってエラーメッセージが出ますので気付きやすいといえば気付きやすいのですがね。

コード上どうしても配列にカラ要素を入れたい!って時にはどうすればいいんだろ?
今まではその場しのぎで(?)文字列型なら@"nil"などの適当な文字列を入れたり、NSDate型なら[NSDate distantFuture]を入れてみたり。

これでもいいんだろうけど、いざ配列の中身をみていろんな処理をする場合に、その要素がnilに相当するかどうかをチェックするには、代わりに何を入れたか知っておかないとダメなので面倒。型によっても評価方法変わるし。
//(1) NSString型の場合
if ([[array objectAtIndex:ii] isEqualToString:@"nil"]) {
	//
}

//(2) NSDate型の場合
if ([[array objectAtIndex:ii] isEqualToDate:[NSDate distantFuture]]) {
	//            
}


ところが、、、[NSNull null]なんてのがあるのをつい先日知りました。 これは配列に追加することができますから次のように書いても落ちません。
[array addObject:[NSNull null]];//問題なし!

中身があるなしをif文で判定しようと次のようなコードを書いてみると、、、
if ([array objectAtIndex:ii]) {//間違い
	//
}
↑このif文は中身がカラ([NSNull null])でも常に真と評価するので、意図しないことに。

if ([array objectAtIndex:ii] == [NSNull null]) {
	//
}
↑このように == (もしくは != )で評価するとカラ要素かどうか判定することができます。

というわけで、配列にカラ要素を追加する時には[NSNull null]を使う!と決めうちしておくと何かとラクチンかも。

<< 隙間時間に図書館で借りた本を読む  TopPage  コードで画像を影付き角丸にする >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/522-201b08ff




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad