NSUserDefaults未在IOS4中加载

时间:2010-11-03 16:08:11

标签: cocoa loading nsuserdefaults

我有一个在OS 3.x下编写的应用程序 - 当时工作正常。 自从重新安装OS 4.1以来,它不再适用于加载应用程序设置。

我有一个与应用程序捆绑在一起的“root.plist”文件。一些默认设置已经通过编辑文件设置,即主机名,超时等。新用户必须提供一些登录凭据,因此这些设置留空。当应用程序第一次启动时,它会检测到丢失的凭据并关闭,要求用户转到“设置”并输入凭据。 如果我打开设置,我会看到我的期望; root.plist中的主机名,超时和其他默认值。我输入用户名和密码,以及另外一个ID代码。 当我重新启动应用程序时,我为我刚刚键入的数据获取值,加上BOOL protocolswitch = YES(我没有更改)。尽管出现在设置中,其他值都返回nil。

username   = [[NSUserDefaults standardUserDefaults] stringForKey:@"name_preference"];
password   = [[NSUserDefaults standardUserDefaults] stringForKey:@"password_preference"];
CRMID      =  [[[[NSUserDefaults standardUserDefaults] stringForKey:@"userID_preference"]uppercaseString] retain];
hostname   = [[NSUserDefaults standardUserDefaults] stringForKey:@"hostname_preference"];
protocolSwitch = [[NSUserDefaults standardUserDefaults] boolForKey:@"http_preference"];
timeout    = [[NSUserDefaults standardUserDefaults] doubleForKey:@"timeout_preference"];
portNumber = [[NSUserDefaults standardUserDefaults] integerForKey:@"port_preference"];
bccEmail   = [[NSUserDefaults standardUserDefaults] stringForKey:@"bcc_email_preference"];
locationOn = [[NSUserDefaults standardUserDefaults] boolForKey:@"location_preference"];

我知道“同步”,但我实际上并没有在我的应用程序中更改这些值,因此我不知道这是如何应用的。我还确保应用程序在重新启动之前没有在后台运行,没有任何区别。 它在OS4之前完美运行,是否有人了解行为的变化?有什么办法解决吗? 干杯,

Sarge62。

设置结果肯定有问题。 在应用程序启动时将字典键转储到控制台,我看到了:

"location_preference",
NSInterfaceStyle,
AppleLanguages,
"userID_preference",
AppleKeyboardsExpanded,
AppleLocale,
AppleKeyboards,
NSLanguages,
"http_preference",
"password_preference",
"name_preference"

在plist中只定义了五个键! 如果我转到设置并将主机名更改为plist默认值以外的其他名称,它将显示在上面的日志中。 似乎设置屏幕中存在一个错误(?),它只记录从初始默认值更改的键(至少对于字符串对象,BOOLS是正常的)。

1 个答案:

答案 0 :(得分:1)

您是否注册了默认值?这通常在app delegate的+ (void) initialize类方法中完成。

例如

+ (void)initialize {
NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary];
[defaultValues setObject:@"defaultHostname" forKey:@"hostname"];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
}