我正在创建(用户按下按钮)许多UIImageViews程序,并在以这种方式创建时为每个分配标记:
int a;
if (a != nil){
a = 0;
}
a = a + 1;
image1.tag = a;
问题是a = a + 1我希望变量增加:1,2,3,4 ...但它始终为1,所以如果我添加一个++,每个Image的标记为1 ,标签2被分配给所有人。为什么??谢谢你的回答
答案 0 :(得分:4)
我假设a
是int
或其他一些原始类型。原始类型将从不成为nil
(好吧,是的,nil
在技术上是(void *)0
,但是甚至不能去那里。你不应该使用{{ 1}}用于原始类型。);只有一个对象可以是nil
。因此,
nil
除非if (a != nil)
为零,始终才会为真,因此a
每次都会设置为零。
编辑:您还在方法调用的范围内声明a
,因此每次都会重新创建它。将其移动到合成属性。
答案 1 :(得分:2)
这假设a是一种简单类型。
首先,你永远不应该比较像这样的简单类型;
if (a != nil){
a = 0;
}
然而,在按下第一个按钮后,上面的if语句将始终为true,因为a将是> 0因此不会评估为NULL。因此,您的if语句将始终重置为零。如果希望标记增加,则删除该if语句。
假设a不是简单类型。
创建一个int并删除if语句。 Heres是一些支持代码。
@implementation ViewController{
int a;
}
-(void)pressed{
a = a + 1;
NSLog(@"%d",a);
}
- (void)viewDidLoad{
[super viewDidLoad];
a = 0;
UIButton * b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
b.frame = CGRectMake(0, 0, 100, 50);
[b addTarget:self action:@selector(pressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:b];
}
@end
答案 2 :(得分:0)
nil
等于0.因此,在方法开始时,如果a
不为0,则将其设置为0然后递增。完全杀死零检查,它应该工作。