在ObjC setter / getter中增加int值

时间:2014-07-07 20:43:39

标签: objective-c

我无法弄清楚这一点。我需要一些帮助。

这是在我的viewController.h文件中:

@property (nonatomic, assign) int count;

它保存用户显示特定屏幕的次数。 (调用viewDidLoad方法)。

每次viewDidLoad方法运行时,我都会调用此方法来增加计数:

- (void)returnCount{
    NSNumber *num = [NSNumber numberWithInt:self.count];
    NSLog(@"%@",num);
    if ([num intValue] == 0) {
        self.count = 0;
        NSLog(@"This worked and now the nil number is :%i",self.count);
    }else{
        self.count = self.count + 1;
        NSLog(@"This worked and now the 0 number is :%i",self.count);
    }

self.count在条件语句中的代码中使用(如果self.count == 0)然后执行某些操作,if(self.count> 1)然后执行其他操作。

每次调用它时,self.count保持为0.如何正确地将其递增一个?

谢谢

3 个答案:

答案 0 :(得分:0)

你的代码对我没有意义......

您的代码的简化版本是

if (self.count == 0) {

}else{
    self.count += 1;
} 

如果self.count为0则不执行任何操作,除非您将其设置为其他位置的非零值,否则它将保持为0。

删除if支票,仅保留self.count += 1;self.count = 1方法中的init

答案 1 :(得分:0)

什么时候你期望发生增量?你的代码:

NSNumber *num = [NSNumber numberWithInt:self.count];
NSLog(@"%@",num);
if ([num intValue] == 0) {
    self.count = 0;
    NSLog(@"This worked and now the nil number is :%i",self.count);
}else{
    self.count = self.count + 1;
    NSLog(@"This worked and now the 0 number is :%i",self.count);
}

其相关部分可以更简单地写成:

if (self.count == 0) {
    self.count = 0;
}else{
    self.count = self.count + 1;
}

您认为self.count = self.count + 1会在什么场合进行?如果count为零,则它将保持为零。根据与对象分配有关的规则,它最初为零。因此,根据您发布的代码,它始终为零。

答案 2 :(得分:0)

问题是每次重新创建视图控制器时(和viewDidLoad运行),计数都将重置为0。你应该创建一个静态int,可以这样做,

- (void)viewDidLoad {
    static int count = 0;
    [super viewDidLoad];
    count +=1;
    NSLog(@"%d",count);
}

静态int仅在运行的生命周期中初始化一次,并且即使控制器在您离开时取消分配,也会保留其值。即使应用程序进入后台,它也会保留此值。只有在应用关闭时才会重置。