也许有人可以为我澄清这一点。
我有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的可能性,但我不确定这是否是正确的方法。这对我来说听起来有点多余。
答案 0 :(得分:2)
此:
FirstViewController *firstView = [[FirstViewController alloc] init];
创建与VC 1相同的类的新实例。但它与您最初看到的实例不同,因此它具有不同的设置。
您应该使用导航控制器来获取“真正的”VC 1并记录其设置。
将变量从一个VC传递到下一个VC是一种标准方法,但这取决于您尝试做什么。在某些情况下,最好将值设置为NSUserDefaults
,以便可以从多个不同的屏幕中检查/使用/更改它。
答案 1 :(得分:0)
你创建一个同一个类的新实例,以便为新的内存分配这个为什么它的所有时间都显示为零。
因此您可以更好地选择将父类的对象分配给子类/
否则只制作一次课程对象......