NSUserDefaults 在模拟器上保存/加载,但不在设备上

NSUserDefaults saves / loads on simulator but not on device

我正在玩 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 上保存了自定义 class。为此,我使用了 How to store custom objects in NSUserDefaults 的指导(以防有人感兴趣)。

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

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

你试过用 setObject 代替 setValue 吗?

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

我想保存它可能有问题。

检查到底保存了什么。 您可以使用 this

打印完整的 NSUserDefaults