NSUserDefaults在iPhone和模拟器上的工作方式不同

问题描述:

我正在使用NSUserDefaults在另一个视图控制器上保存一个整数,以便当这个按钮被按下时,我知道要使用哪个图像。出于某种原因,模拟器只使用image1,而我的手机只使用image2。我能做什么?NSUserDefaults在iPhone和模拟器上的工作方式不同

if ([[NSUserDefaults standardUserDefaults] integerForKey:@"key"] == 1){ 

    leftStill = [UIImage imageNamed:@"image1.png"]; 

} 

if ([[NSUserDefaults standardUserDefaults] integerForKey:@"key"] == 2) { 

    leftStill = [UIImage imageNamed:@"image2.png"]; 

} 

[imageView setImage:leftStill]; 
+0

您的代码告诉您,在模拟器上,密钥的值为1,而设备上的值为2。你可能在你的代码中有一个错误,你在设置这些键,但是你没有发布,所以我们怎么说? – idz 2012-08-14 23:48:52

+0

当我使用NSLog检查时,没有整数正确出来,它只有图像 – 2012-08-14 23:50:12

+0

这没有任何意义。其他事情正在发生。例如“image1.png”和“image2.png”在某种程度上不是您认为的那样。你可以通过在分配给'leftStill'之前把'NSLog'加以验证。 – idz 2012-08-14 23:58:48

您是否在设置NSUserDefaults中的值后调用- (BOOL)synchronize;

+0

不知道我到底做了什么? – 2012-08-15 00:10:57

+3

阅读有关NSUerDefaults的文档。习惯于阅读它们,使其成为第二天性。你会在那里找到你的答案。 – Jim 2012-08-15 00:24:23

您是否在此代码块之前以零/未分配的leftImage和imageView开头?

由于您正在测试一个整数值,我不知道下面的代码可能不适合您的工作,可能会避免您的代码当前正在执行的值的两个读数,这可能是导致的问题,而且还使用中介持有人的leftImage本身:

switch([[NSUserDefaults standardUserDefaults] integerForKey:@"key"]) { 
    case 1: 
    [imageView setImage:[UIImage imageNamed:@"image1.png"]; 
    break; 
    case 2: 
    [imageView setImage:[UIImage imageNamed:@"image2.png"]; 
    break; 
    default: 
    break; 
} 

当您存储在NSUserDefaults的价值你会做类似如下:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setInteger:1 forKey:@"key"]; 
[defaults synchronize]; 

的同步并自行定期发生但你没有瓜尔豆当它会发生时。所以我通常会在任何时候为NSUserDefaults中的某个键设置一个值的同步。

您可能还想考虑一些更适合您尝试完成的任务的事情,例如使用prepareForSegue。