1

我有一个总是返回零的 NSInteger :( 我将它声明为:

NSInteger level;
@property(nonatomic, assign) NSInteger level;

合成:

@synthesize fileName, filePath, theActualIndexPath, titleBar, level;

然后在使用时NSLog(@"%d", level)总是返回 0,即使在之后

level++; 

或者

level += 1;

我做错了什么?我 100% 肯定会加 1,level但不明白出了什么问题:(

编辑:

我使用这个 NSInteger 的 if 语句

if (level == 0) {
    self.navigationItem.title = @"Test";

} else {
    self.navigationItem.title = self.titleBar;

}

这总是在第一个结束,即使在添加 1

4

3 回答 3

1

正在更改的变量与正在访问的变量不同(在if语句中)。

在控制台中打印level设置它的位置(之前和之后)和访问 s 的位置(在if语句中)的值和地址。

于 2011-12-09T17:42:10.470 回答
1

为什么要声明level两次?

删除这一行:NSInteger level;

的第一个声明level是一个全局范围的变量,第二个是类的实例变量。根据您的范围,level被递增的++levellevel被打印NSLog("%d", level);和测试的不同if (level == 0)

编辑

是的。level如果您分配视图控制器的另一个实例,为什么您希望不会被新分配?如果你想这样做,那么你要么必须创建变量static,它在同一个类的实例之间共享它,要么确保你做这样的事情:

MyViewController *newViewController = [[MyViewController alloc] init]; // However this goes
newViewController.level = oldViewController.level; // Make sure you pass the level on
于 2011-12-09T17:58:18.227 回答
0

试试这个:
在 .h

@property(nonatomic) NSInteger level; // not an object assign not needed

在他们中

@synthesize level = _level;  
self.level = self.level + 1;  // and try this

并删除线

NSInteger level;

这管用吗?

于 2011-12-09T17:22:33.453 回答