-6

我正在使用 NSUserDefaults 在另一个视图控制器上保存一个整数,以便在推送这个时我知道要使用哪个图像。出于某种原因,模拟器只使用 image1 而我的手机只使用 image2。我能做些什么?

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];
4

3 回答 3

1

- (BOOL)synchronize;在设置 NSUserDefaults 的值后调用了吗?

于 2012-08-14T23:54:00.723 回答
0

您是否在此代码块之前从零/未分配的 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;
}
于 2012-08-15T00:32:29.460 回答
0

当您将值存储在 NSUserDefaults 中时,您将执行以下操作:

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

同步确实会定期发生,但您无法保证何时会发生。因此,我通常在为 NSUserDefaults 中的键设置值时进行同步。

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

于 2012-08-15T00:42:35.747 回答