方法不会更改整数值

时间:2013-12-19 13:34:51

标签: ios objective-c integer

也许有人可以为我澄清这一点。

我有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;
}

现在,当我从视图控制器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;
}

现在,当我从视图控制器1导航到2到3到4时,该值未更改为1但仍为0.

这是标准行为还是我做错了什么? 我已经考虑过将editStarted从视图控制器1传递到2到3到4的可能性,但我不确定这是否是正确的方法。这对我来说听起来有点多余。

2 个答案:

答案 0 :(得分:2)

此:

FirstViewController *firstView = [[FirstViewController alloc] init];

创建与VC 1相同的类的新实例。但它与您最初看到的实例不同,因此它具有不同的设置。

您应该使用导航控制器来获取“真正的”VC 1并记录其设置。


将变量从一个VC传递到下一个VC是一种标准方法,但这取决于您尝试做什么。在某些情况下,最好将值设置为NSUserDefaults,以便可以从多个不同的屏幕中检查/使用/更改它。

答案 1 :(得分:0)

你创建一个同一个类的新实例,以便为新的内存分配这个为什么它的所有时间都显示为零。

因此您可以更好地选择将父类的对象分配给子类/

否则只制作一次课程对象......