从NSUserDefaults,obj-c加载的问题

时间:2011-09-06 05:53:55

标签: objective-c nsuserdefaults

我遇到NSUserDefaults问题。我正在保存一个名称,然后尝试在其他视图控制器的代码中访问它,但似乎我的键是空的或者没有保存,因为当我从键中显示字符串时我的标签是空白的。

-(void) saveName {

    NSString *name = nameField.text;
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:name forKey:@"playersName"];
    [defaults synchronize];
 }


-(void) viewDidLoad  // method called later on in code from different viewcontroller
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *name = [defaults objectForKey:@"playersName"];
    playerName.text = name; // player name == myLabel

    if ([[NSUsersDefaults standardUserDefaults] objectForKey:@"playersName"] == nil)  {
        playerName.text =@" blank";
    }    
}

我的字符串似乎没有保存到userdefaults,因为@“blank”字符串一直显示我的标签。我对NSUserDefaults不太熟悉,所以非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

使用NSUserDefaults时需要注意的一些事项:

  1. 调用syncrhonize方法不是必需的,如果您的程序是多线程的,只会使它变慢。
  2. 检查项目中其他库是否正在使用您使用的密钥
  3. 检查您为密钥设置的值是否为nil
  4. 尝试使用stringForKey:boolForKey:代替objectForKey:
  5. 我在NSUserDefaults上遇到过几次麻烦,但最后通常我的代码存在问题。

答案 1 :(得分:0)

我建议你检查你的'(void)saveName'方法是否被调用...放一些断点并查看结果