2011-04-08 40 views
1

下面的代碼崩潰,我而NSUserDefaults的獲取

[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]; 

我檢查,發現存在與NSUserDefaults的2453名無按鍵崩潰。我第一次運行應用程序,所以這個鍵不會在那裏,但會在稍後的時間點添加。如何忽略這次崩潰。

+0

那麼碰撞日誌是什麼樣的? – 2011-04-08 20:37:20

回答

0
[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]; 
//              ^^ ^

「鑰匙」在-dictionaryForKey:must be an NSString。它不能是int。因此,儘管您提供的密鑰僅包含數字,但您仍然必須使用@"..."傳遞字符串。事實上,關鍵不存在與崩潰無關。

+0

我的錯誤寫在這裏...但在代碼中,我只傳遞NSString。 – Abhinav 2011-04-08 20:36:51

+0

@Abhinav:如果是這種情況,那麼它不會崩潰,只需返回'nil'。請顯示崩潰日誌。 – kennytm 2011-04-08 20:38:15

+0

我知道了......我從服務器獲取該字符串,並將其設置爲零。所以它崩潰了。 – Abhinav 2011-04-08 20:44:12

0
if ([[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]) { 
    // this line will only be reached if there is something for @"2453" 
} 
2

如果該行

[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]; 

是崩潰了行了,你可以試試這個,而不是

NSDictionary *dict = nil; 
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"2453"] != nil) 
    dict = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]; 

if (dict) { 
    ... 
} 

我的預感是,在這種情況下dictionaryForKey呼籲objectForKey幕後並且一味地試圖爲你鑄造nilNSDictionary,我認爲這會導致崩潰。但通過首先檢查自己是否有任何類型的該鍵的對象,可以避免崩潰。給它旋轉並報告回來! :-)