我有两个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):
}
答案 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
- 方法中将其调整为测试变量:)。
我知道这有点令人困惑,我花了几个小时才弄清楚为什么我的变量也没有设置。