0

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

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];

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

4

2 回答 2

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
}
于 2013-01-27T00:23:09.167 回答
-1

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

于 2013-01-27T00:43:39.590 回答