iphone sdk:当推送另一个viewController时,对象会丢失?

时间:2010-08-22 10:19:04

标签: iphone objective-c uiviewcontroller

每个人,我都不知道为什么这不起作用希望有人可以帮助我。 这就是我想要做的事情:

我有两个ViewControllers,让我们调用它们secondViewController和firstViewController。 应用程序启动时会显示firstViewController并推送第二个ViewController。

在secondViewController中我定义了一个属性。

现在我想在firstViewController中更改此属性,然后推送secondViewController但由于某种原因,只要第二个ViewController被推送,我的属性就会重置为零....为什么会发生这种情况?继承我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 secondViewController.test = 2;
[self.navigationController pushViewController:secondViewController animated:YES];       

}

此示例中的test属性只是一个简单的NSInteger。现在,只要第二个ViewController被推送,“test”值就不再是两个,它就是零..... 为什么????

这是我的secondViewController的头文件:     #import

@interface secondViewController : UIViewController {

NSInteger test;

}

@property NSInteger test;

@end

这是.m文件:

- (void) viewDidLoad{
NSLog(@"%i", self.test):
}

1 个答案:

答案 0 :(得分:0)

如果您从viewDidLoad test检查它可能并不总是2.我实际上不明白为什么会这样。例如:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    SecondViewController viewController = [[SecondViewController alloc] init];
    viewController.test = 2;
    [self.navigationController pushViewController:viewController animated:YES];
}

// In SecondViewController

- (void)viewDidLoad {
    NSLog(@"ViewDidLoad: %i", self.test);

    [super viewDidLoad];
}

- (void)viewWillAppear:(BOOL)animated {
    NSLog(@"ViewWillAppear: %i", self.test);

    [super viewWillAppear:animated];
}

这有时会导致以下输出:

  

ViewDidLoad:0

     

ViewWillAppear:2

但有时它也可能导致以下输出:

  

ViewDidLoad:2

     

ViewWillAppear:2

因此,我建议您在ViewWillAppear - 方法而不是ViewDidLoad - 方法中使用您的变量。 您应该在UIView - 方法中创建ViewDidLoad和其他内容,并在ViewWillAppear - 方法中将其调整为测试变量:)。

我知道这有点令人困惑,我花了几个小时才弄清楚为什么我的变量也没有设置。