0

我正在以编程方式创建(用户按下按钮)许多 UIImageViews,并在以这种方式创建时为每个 UIImageViews 分配一个标签:

    int a;

    if (a != nil){

        a = 0;
    }

    a = a + 1;
    image1.tag = a;

问题是使用 a = a +1 我希望变量增加:1,2,3,4 ...但它始终保持为 1,因此每个图像都有一个标签 1。如果我添加 a++,标签2 分配给所有。为什么??感谢你的回答

4

3 回答 3

4

我假设a是一个int或其他一些原始类型。原始类型永远不会存在nil(好吧,是的,nil在技术上是这样(void *)0,但我们甚至不要去那里。你不应该使用nil原始类型。);只有一个对象可以nil。所以,

if (a != nil)

除非为零,否则将始终为真,因此每次都将设置回零。aa

编辑:您还在a方法调用的范围内声明,因此每次都会重新创建它。将其移至合成属性。

于 2012-05-04T19:33:17.630 回答
2

这是假设 a 是一个简单的类型。

首先,您永远不应该像这样比较简单的类型;


if (a != nil){
    a = 0;
}

但是,在按下第一个按钮后,上面的 if 语句将始终为真,因为 a 将 > 0,因此不会计算为 NULL。因此,您的 if 语句将始终将 a 重置为零。如果您希望标签递增,请删除该 if 语句。

假设 a 不是简单类型。

创建一个 int 并删除 if 语句。这是一些支持代码。

@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

于 2012-05-04T19:45:35.213 回答
0

nil等于 0。所以在方法的开头,如果a不是 0,则将其设置为 0,然后将其递增。完全取消 nil 检查,它应该可以工作。

于 2012-05-04T19:33:57.617 回答