Objective c 每次向变量添加1

Objective c 每次向变量添加1,objective-c,xcode,Objective C,Xcode,我正在以编程方式创建(用户按下按钮)许多UIImageView,并在以这种方式创建时为每个UIImageView分配一个标记: int a; if (a != nil){ a = 0; } a = a + 1; image1.tag = a; 问题是a=a+1时,我希望变量增加:1,2,3,4。。。但它始终保持为1,因此每个图像都有一个标记1。如果我添加一个++,标记2将被分配给all。为什么?谢谢你的回答我假设a是int或其他一些

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

    int a;

    if (a != nil){

        a = 0;
    }

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

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

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

if (a != nil)
除非
a
为零,否则将始终为真,因此,
a
每次都将设置回零


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

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

if (a != nil)
除非
a
为零,否则将始终为真,因此,
a
每次都将设置回零


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

nil
等于0。因此,在方法的开头,如果
a
不是0,则将其设置为0,然后递增。只需完全取消nil检查,它就会工作。

nil
等于0。因此,在方法的开头,如果
a
不是0,则将其设置为0,然后递增。只需完全取消nil检查,它就会工作。

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

首先,你不应该像这样比较一个简单的类型


if (a != nil){
    a = 0;
}
但是,在按下第一个按钮后,上面的if语句将始终为true,因为a将大于0,因此不会计算为NULL。因此,if语句总是将a重置为零。如果希望标记递增,请删除该If语句

假设a不是简单类型

生成一个int并删除if语句。下面是一些支持代码。

@实现视图控制器{
INTA;
}
-(空)压{
a=a+1;
NSLog(@“%d”,a);
}
-(无效)viewDidLoad{
[超级视图下载];
a=0;
UIButton*b=[UIButton按钮类型:UIButtonTypeLoundRect];
b、 frame=CGRectMake(0,0,100,50);
[b addTarget:self action:@selector(按下)forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:b];
}
@结束

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

首先,你不应该像这样比较一个简单的类型


if (a != nil){
    a = 0;
}
但是,在按下第一个按钮后,上面的if语句将始终为true,因为a将大于0,因此不会计算为NULL。因此,if语句总是将a重置为零。如果希望标记递增,请删除该If语句

假设a不是简单类型

生成一个int并删除if语句。下面是一些支持代码。

@实现视图控制器{
INTA;
}
-(空)压{
a=a+1;
NSLog(@“%d”,a);
}
-(无效)viewDidLoad{
[超级视图下载];
a=0;
UIButton*b=[UIButton按钮类型:UIButtonTypeLoundRect];
b、 frame=CGRectMake(0,0,100,50);
[b addTarget:self action:@selector(按下)forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:b];
}
@结束

a!=0
但是,您不应该在增量范围内定义A,
int A每次都会将其重置回(void*)0。(除非变量
a
的声明仅用于澄清目的)。如何执行此操作:“a在其增量范围内”您需要将
a
的声明移出函数。将其改为合成属性。在头文件中,需要
@property(非原子)int a@synthesis
a!=0
但是,您不应该在增量范围内定义A,
int A每次都会将其重置回(void*)0。(除非变量
a
的声明仅用于澄清目的)。如何执行此操作:“a在其增量范围内”您需要将
a
的声明移出函数。将其改为合成属性。在头文件中,需要
@property(非原子)int a@synthesis。谢谢,除了NSLog(@“%d”,a)之外,工作正常;它不显示任何内容。谢谢,工作正常,除了NSLog(@“%d”,a);没有显示任何内容。