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];
您是否在设置NSUserDefaults中的值后调用- (BOOL)synchronize;
?
不知道我到底做了什么? – 2012-08-15 00:10:57
阅读有关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。
您的代码告诉您,在模拟器上,密钥的值为1,而设备上的值为2。你可能在你的代码中有一个错误,你在设置这些键,但是你没有发布,所以我们怎么说? – idz 2012-08-14 23:48:52
当我使用NSLog检查时,没有整数正确出来,它只有图像 – 2012-08-14 23:50:12
这没有任何意义。其他事情正在发生。例如“image1.png”和“image2.png”在某种程度上不是您认为的那样。你可以通过在分配给'leftStill'之前把'NSLog'加以验证。 – idz 2012-08-14 23:58:48