从NSUserDefaults加载时出现的问题

时间:2011-12-08 10:25:25

标签: objective-c ios5 nsuserdefaults

当我的应用从NSUserDefaults加载时,我遇到了一个非常奇怪的问题。 这是我的appDelegate中的代码:

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 NSString *user = [[NSString alloc]initWithString:[defaults objectForKey:@"_settingsUsername"]];
 NSString *password = [[NSString alloc]initWithString:[defaults objectForKey:@"_settingsPassword"]];
 NSString *instance = [[NSString alloc]initWithString:[defaults objectForKey:@"_settingsInstance"]];

错误是这样的:[NSPlaceholderString initWithString:]:nil参数' 这很奇怪,因为我输入了Settings.bundle - > Root.plist上面所有字段的默认值。

3 个答案:

答案 0 :(得分:1)

奇怪的是它应该如何运作 - 这最初让我很困惑。

我想要记住的是,您可以使用NSUserDefaults 而不使用 Settings.bundle,因此它不是设置默认值的唯一方法。

Apple提供示例代码AppPrefs,其中显示了如何将设置中的默认值复制到NSUserDefaults

答案 1 :(得分:1)

你为什么不用它?

NSUserDefaults *defaults = [NSUserDefaults standarduserDefaults];
NSString *user = [defaults objectForKey:@"_settingsUsername"];
NSString *password = [defaults objectForKey:@"_settingsPassword"];
NSString *instance = [defaults objectForKey:@"_settingsInstance"];

确保这些键有对象。

希望有所帮助

答案 2 :(得分:0)

我认为问题在于,如果用户尚未进入您的应用的设置,那么从这些键的NSUserDefaults返回的所有值都是零。你需要处理这种情况并采取相应的行动 - 可能是进入Settings.bundle并挑选你放在那里的默认值。我只想写一个获取键值的方法,如果NSUserDefaults返回nil,它会为你处理所有设置包的查询。