保存NSUserDefaults问题?

时间:2013-01-27 00:20:15

标签: objective-c macos nsuserdefaults

我一直在开发一个应用程序,并且需要存储一个字符串。我使用此代码设置默认值:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:CertificateKey.stringValue forKey:@"SavedKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"%@",[defaults objectForKey:@"SavedKey"]);

我爱上了它,所以我知道它已经救了......好吧,它向我展示了它的价值。 当我打开我的应用程序时,我使用它来检索默认值:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[CertificateKey setStringValue:[defaults objectForKey:@"SavedKey"]];
[CertificateKey setTitleWithMnemonic:[defaults objectForKey:@"SavedKey"]];
[[NSUserDefaults standardUserDefaults] synchronize];

为什么不能获得默认值?我没有完全保存它吗?

2 个答案:

答案 0 :(得分:2)

不要通过按xcode中的停止按钮退出应用程序。而是通过右键单击应用程序图标并选择“退出”退出。

修改

也许第一次执行应用程序时,您希望保存一些默认值,但是您不希望将它们设置为应用程序运行的第二次+时间。

为此,在某些类初始化方法中注册默认值,如下所示:

+ (void) initialize
{
    NSUserDefaults* defaults= [NSUserDefaults standardUserDefaults];
    [defaults registerDefaults: @{} ];
    // This case it's an empty dictionary, but you can put whatever you want inside it.
    // just convert it to data if it's not an object storable to a plist file.
}

此外,您正在使用setValue:forKey :,该方法继承自NSObject。使用setObject:forKey :.

如果要在结尾处保存默认值,请使用finalize:

- (void) finalize
{
    // Save the defaults here
}

答案 1 :(得分:-1)

您可能遇到问题,因为您正在创建NSUserDefaults的实例。根据我的理解,您应该像这样访问它:[[NSUserDefaults standardUserDefaults] setValue:@"Pikachu" forKey:@"Best Pokemon Ever"]; [[NSUserDefaults standardDefaults] objectForKey:@"Best Pokemon Ever"];而不是实际创建它的实例。