web-serviceによって返されたフィールドと、文字列true
またはfalse
のいずれかのみを比較しようとします(YES、STRINGでブール値ではありません)。このような別の文字列で:withOptions
文字列は「真」の文字列が含まれている場合[NSNull isEqualToString:]:インスタンスに送信された認識できないセレクタ
if ([withOptions isEqualToString:@"true"]) {
[email protected]"with";
}else {
[email protected]"without";
}
ので、すべてがOKですが、それが「偽」の文字列が含まれているとき、私はログにこの例外が発生しました:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x2984d68'
私はかなり確信していますいずれの場合も、withOptions
には文字列値( "true"または "false"のいずれか)が含まれ、NULLを含んでいません。
あなたは 'withOptions'は常に文字列であるように確認するべきではありません。 'withOptions'は、このエラーがスローされたときに' NSNull'のインスタンスです。考えられる理由は2つあります: '+ [NSNull null]'を返すメソッドから 'withOptions'を取得しています。見つからないことを示すために、またはメモリを壊してすべてのベットがオフになっていることを示します。 –
こんにちは、私にあなたの2番目の理由を教えていただけますか? thx – Luca
これは、オブジェクトをどこかでオーバーリリースし、新しいオブジェクトが同じアドレス(異なるタイプのオブジェクト)に割り当てられたことを意味します。しかし、+ + nullはアプリライフサイクルの早い段階で割り当てられたシングルトンを返しますので、これは起こり得ません。バリーの第一の理由は、その可能性が高いことです。 – bbum