setImage:不会导致图像更改

时间:2011-10-25 18:02:23

标签: objective-c ios xcode uiimageview compiler-warnings

我在代码中创建了两个UIImageView

UIImageView *background = [[UIImageView alloc]initWithFrame:CGRectMake(150, 60, 180, 180)];
UIImageView *result = [[UIImageView alloc]initWithFrame:CGRectMake(150, 60, 180, 180)];
[self.view addSubview:background];
[self.view addSubview:result];
[self.view insertSubview:result aboveSubview:background];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[background setImage:[UIImage imageNamed:[defaults objectForKey:@"colour"]]];

当您按下按钮时,将执行以下代码:

- (IBAction)oneToSix {
    int rNumber = (arc4random() % 6) + 1;
    [result setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d", rNumber, @".png"]]];
}

但图像没有变化。

另外,我收到了这些错误:

errors

3 个答案:

答案 0 :(得分:4)

您正在重新声明已在类范围中定义的方法范围中的变量。从初始化中删除UIImageView *部分。

注意:更改图像时它什么都不做,因为在ObjectiveC中,对nil(未初始化的实例成员)的方法调用是有效的,并且不会产生任何可见的结果。

答案 1 :(得分:1)

[result setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d", rNumber, @".png"]]];

请注意,您只是将数字放入该字符串中。您需要%d%@作为格式。

这些不是错误,而是警告。您的类中有一个名为background的实例变量。您还在方法中声明了一个名为background的局部变量。警告是让你知道存在冲突并且它正在选择实例变量的局部变量。

答案 2 :(得分:0)

图片是Red还是Red.png?因为如果是后者,您应该在setImage方法中附加文件扩展名,例如[NSString stringWithFormat:@"%@.png", [defaults objectForKey:"colour"]]

此外,您要插入result imageView两次。删除第一个。