我有一个在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是正常的)。
答案 0 :(得分:1)
您是否注册了默认值?这通常在app delegate的+ (void) initialize
类方法中完成。
例如
+ (void)initialize {
NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary];
[defaultValues setObject:@"defaultHostname" forKey:@"hostname"];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
}