2013-12-19 48 views
0

也许有人可以为我澄清这一点。整数值不会被方法改变

我有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.

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

回答

2

此:

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

创建同一类VC 1的新实例,但它不是您最初看到了同样的情况,所以它有不同的设置。

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


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

+0

。当然,这是有道理的!谢谢。通过使用导航控制器,你的意思是appDelegate.m,我定义了“ - (BOOL)应用程序:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions ”etc? – Eloy

+0

只是为了您的信息,我想从视图控制器1到4,当我在4时,我想在VC1中显示从2到4的数据。我使用2到4来进行特定的选择。 – Eloy

+1

在VC中,'self.navigationController'会让你进入导航控制器。代表关系适合于将选择数据从2,3和4回传给1。 – Wain

0

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

让你有更好的选择父类的对象分配到子类/

以其他方式类的对象只有一次......