2011-01-25 22 views
13

NSIntegerが有効であることを確認するにはどうすればよいですか?NSInteger!= nil

NSInteger previousScore = [[self score] integerValue]; 
    if (previousScore != nil) { 
     //do something 
    } 
+0

挨拶が削除されました: "ありがとうございます"次回は –

答えて

14

、あなたのような何かをしたいです。

+0

ありがとう。いい案。私はplistを読み書きしているので、配列のすべてがNSNumberでなければなりません。 – intomo

12

NSIntegerはオブジェクトではありません。単純に型キャストされたプリミティブintです。したがって、決してnilにはなりません。 intをまっすぐに使用している場合と同じように扱います。

編集: セザールさんのコメント時に言えば、は、64ビットシステム上でNSIntegerは、実際にlongで、32ビットシステム上では、intです。あなたがオブジェクトではなく、プリミティブな値を取り戻すしているので、これは動作します

NSNumber *previousScore = [self score]; 

if (previousScore != nil) { 
    NSInteger previousScoreValue = [previousScore integerValue]; 
    // do something 
} 

:あなたのコード内の妥当性をチェックしたい場合は

+2

として定義してください:#if __LP64__ typedef long NSInteger; #else typedef int NSInteger; endif –

+5

多くの場合、NSIntegerはゼロと同じであるため、実際にはNSIntegerはnilになりますが、コンパイラの警告が出ることもあります。 [self score]がnilに戻った場合、PreviousScoreは0(nil)になります... –

+0

残念ながら、nilは0です。デバッガで "po nil == 0"を試してください。それは "真"を印刷する – nont

関連する問題