嘗試比較網絡服務返回的字段,其中只包含字符串true
或false
(YES,它是STRING而不是布爾值),所以我嘗試比較它用另一個字符串是這樣的:[NSNull isEqualToString:]:無法識別的選擇器發送到實例
if ([withOptions isEqualToString:@"true"]) {
[email protected]"with";
}else {
[email protected]"without";
}
所以當withOptions
字符串中包含的「真實」的字符串,一切正常,當它包含了「假」的字符串我得到這個例外在日誌中:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x2984d68'
我很確定在所有情況下,withOptions
都包含一個字符串值(「true」或「false」),它從不包含NULL。
你不應該那麼肯定'withOptions'始終是一個字符串。 'withOptions'是拋出這個錯誤時'NSNull'的一個實例。有兩種可能的原因:您從可能返回'+ [NSNull null]'的方法中檢索'withOptions',例如,表示未找到,或者您損壞了內存,並且所有投注都關閉。 –
嗨,你能解釋我的第二個原因嗎? THX – Luca
這將意味着你的地方在發佈的對象和新的對象是在同一地址(不同類型的對象)進行分配。儘管如此,這不可能是發生的事情,因爲'+ null'返回在應用生命週期中很早分配的單例。巴里的第一個原因很可能是它。 – bbum