每次向变量添加1

时间:2012-05-04 19:28:43

标签: objective-c xcode

我正在创建(用户按下按钮)许多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被分配给所有人。为什么??谢谢你的回答

3 个答案:

答案 0 :(得分:4)

我假设aint或其他一些原始类型。原始类型将从不成为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然后递增。完全杀死零检查,它应该工作。