下面的代碼崩潰,我而NSUserDefaults的獲取
[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];
我檢查,發現存在與NSUserDefaults的2453名無按鍵崩潰。我第一次運行應用程序,所以這個鍵不會在那裏,但會在稍後的時間點添加。如何忽略這次崩潰。
下面的代碼崩潰,我而NSUserDefaults的獲取
[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];
我檢查,發現存在與NSUserDefaults的2453名無按鍵崩潰。我第一次運行應用程序,所以這個鍵不會在那裏,但會在稍後的時間點添加。如何忽略這次崩潰。
[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];
// ^^ ^
「鑰匙」在-dictionaryForKey:
must be an NSString。它不能是int
。因此,儘管您提供的密鑰僅包含數字,但您仍然必須使用@"..."
傳遞字符串。事實上,關鍵不存在與崩潰無關。
if ([[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]) {
// this line will only be reached if there is something for @"2453"
}
如果該行
[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];
是崩潰了行了,你可以試試這個,而不是
NSDictionary *dict = nil;
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"2453"] != nil)
dict = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];
if (dict) {
...
}
我的預感是,在這種情況下dictionaryForKey
呼籲objectForKey
幕後並且一味地試圖爲你鑄造nil
到NSDictionary
,我認爲這會導致崩潰。但通過首先檢查自己是否有任何類型的該鍵的對象,可以避免崩潰。給它旋轉並報告回來! :-)
那麼碰撞日誌是什麼樣的? – 2011-04-08 20:37:20