也许有人可以为我澄清一下。
我有 4 个 UITableViewControllers,第一个有一个属性
@property (nonatomic, assign) int editStarted;
我在 FirstViewController 中设置了这个属性:
-(id)init
{
// Call the superclass's designated initializer
self = [super initWithStyle:UITableViewStyleGrouped];
if (self) {
editStarted = 0; // NO
}
return self;
}
现在,当我从 View Controller 1 导航到 2 到 3 到 4,并在 FourthViewController 中执行类似的操作时:
FirstViewController *firstView = [[FirstViewController alloc] init];
NSLog(@"editStarted: %d,",firstView.editStarted);
NSLOG 将打印 0。(如果我在 init 中给它另一个值,那么它将打印该值。)
所以回到 FirstViewController,我这样做,将值更改为 1:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
editStarted = 1;
}
现在,当我从 View Controller 1 导航到 2 到 3 到 4 时,值没有更改为 1,但仍然是 0。
这是标准行为还是我做错了什么?
我想到了将 editStarted
从 View Controller 1 传递到 2 到 3 到 4 的可能性,但我不确定这是否是正确的方法。这对我来说听起来有点多余。
最佳答案
这个:
FirstViewController *firstView = [[FirstViewController alloc] init];
创建与 VC 1 相同类的新实例。但它与您最初看到的实例不同,因此它具有不同的设置。
您应该使用导航 Controller 获取“真正的”VC 1 并记录其设置。
将变量从一个 VC 传递到下一个 VC 是一种标准方法,但这取决于您要做什么。在某些情况下,将一个值设置到 NSUserDefaults
中可能会更好,例如,这样可以从多个不同的屏幕检查/使用/更改它。
关于ios - 整数值不会被方法改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20683160/