2013-07-18 184 views
1

我設置的用戶默認值,我不知道爲什麼它崩潰:設置NSUserDefault崩潰

[[NSUserDefaults standardUserDefaults] setObject:[textField text] forKey:@"STRING"]; 

這是好的,但

[[NSUserDefaults standardUserDefaults] setObject:[textField text] forKey:settingKey]; 

這是沒有的。 settingKey是和宣佈,以我使用的類合成的屬性。事實上,即使這條線的工作

[textField setText:[[NSUserDefaults standardUserDefaults] objectForKey:settingKey]]; 

當模擬器崩潰,它使我的核心基礎哈希(CFHash),我無法理解:

0x1c24756: call 0x1d79a00; symbol stub for: getpid 

"Thread 1: EXC_BREAKPOINT (code=EXC_1386_BPT, subcode=0x0)" 
+1

什麼是'settingKey'?它是一個NSString等? –

+0

你在使用多線程嗎? – Groot

+1

settingsKey或settingKey? (你的代碼示例同時顯示) – Vinzzz

回答

2

這裏的問題是settingKey是null的值。

if you are trying to set null value as an key arguement then it'l happend. 
+0

嗯,我測試了它,實際上它是空的......它絕對不應該是。謝謝! –

+1

@樂家聰:歡迎親愛的伴侶,如果這個對你有用,那麼接受它。 – Balu

0

我不知道究竟你的關鍵是什麼類型的對象,所以崩潰可能由兩個問題之一引起:

  1. settingKey沒有可以存儲在一個對象的NSDictionary。存儲在NSUserDefaults中的任何鍵及其值都必須是NSString,NSInteger等。它不能是像int或BOOL這樣的基本數據類型。更具體地說,一個鍵必須是一個NSString。
  2. settingKeyNULL,尚未分配,或已提前解除分配,那麼NSUserDefaults將導致崩潰。鍵不能在NSUserDefaults(或NSDictionaries)中爲NULL
+0

「符合NSCoding」表示給定的類具有某些鍵的訪問器。密鑰本身並不需要遵循NSCoding,爲了證明這一點,請查看['NSString'](http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/類/ NSString_Class/Reference/NSString.html)docs - NSString不符合NSCoding。你說得對,鍵需要是對象 - 事實上,對於NSUserDefaults,鍵需要是字符串 - 但NSCoding不是這個原因。 – Caleb

+1

@Caleb哎呀!感謝您的信息 - 我似乎誤解了NSCoding文檔。我會閱讀它。謝謝。 –