2013-07-18 131 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文档。我会阅读它。谢谢。 –