【问题标题】:NSUserDefaults saves / loads on simulator but not on deviceNSUserDefaults 在模拟器上保存/加载,但不在设备上
【发布时间】:2015-06-11 13:43:06
【问题描述】:

我正在做一个 iphone 游戏并使用 NSUserDefaults 保存数据。以下是我保存用户的方法:

-(void) saveUser:(User*)user forPosition:(int) position{
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:user];
NSUserDefaults*savedData=[NSUserDefaults standardUserDefaults];
[savedData setValue:myEncodedObject forKey:[NSString stringWithFormat:@"user%i",position]];
[savedData synchronize];
self.currentUser=user;}

这是我加载它的方式:

-(BOOL) loadUser:(int) position{
if([savedData objectForKey:[NSString stringWithFormat:@"user%i",position]]){
    NSData *encodedObject = [savedData objectForKey:[NSString stringWithFormat:@"user%i",position]];
    User *user = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
    self.currentUser=user;
    return YES;
}
else return NO;}

如您所见,我在 NSUserDefaults 上保存了一个自定义类。为此,我使用了来自 How to store custom objects in NSUserDefaults 的指导(以防有人感兴趣)。

当我在模拟器中使用它时,它可以完美运行。问题是,如果我在我的 iphone(ios 8.1 上的 iphone 6)上运行它,它不会加载任何东西。

有什么想法吗?我已经访问过这个问题NSUserdefaults works on Simulator but not on Device,但没有任何效果。 谢谢!

【问题讨论】:

  • 您可以打印 NSUserdefaults 的所有内容并检查。也许也可以在这里提出问题..这是如何做到的stackoverflow.com/questions/1676938/…
  • 谢谢,通过打印内容我发现了问题所在,我可以修复它。问题是 (int) 位置收到了错误的数字(我不知道为什么,也不知道为什么在模拟器上它可以正常工作),因此它用另一个键保存了用户。我找到了解决这个问题的方法。谢谢
  • 刚刚添加了与答案相同的内容。也许你可以接受答案。谢谢

标签: ios objective-c save load nsuserdefaults


【解决方案1】:

你试过用 setObject 代替 setValue 吗?

[savedData setObject:myEncodedObject forKey:[NSString stringWithFormat:@"user%i",position]];

【讨论】:

    【解决方案2】:

    我想保存它可能有问题。

    检查正在保存的具体内容。 您可以使用this 打印完整的NSUserDefaults

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多