我正在使用导航控制器并推送新的视图控制器以在多路Iphone应用程序之间切换。如下所示;
- (IBAction)startButton:(id)sender{
GoalViewController *thisGoalViewController = [[GoalViewController alloc]
initWithNibName:@"GoalViewController" bundle:nil];
self.goalViewController = thisGoalViewController;
[thisGoalViewController release];
[[self navigationController] pushViewController:self.goalViewController animated:YES ];
}
一切正常。但是当我放置一个
NSLog(@"Goal View ID: %p",self);
在GoalViewController viewDidLoad方法中,每次切换页面时都会得到不同的值。
在GoalViewController中,我使用它来弹回;
- (IBAction)backButton:(id)sender{
[(UINavigationController*)self.parentViewController popViewControllerAnimated:YES];
}
正如我所说,一切正常,但我想我每次点击访问屏幕时都会创建GoalViewController的新实例。 从不调用GoalViewController中的viewDidUnload方法,所以我认为它们永远不会被释放,最终会导致崩溃。但是,通过多次切换页面,我无法崩溃。
我一直在寻找样本来将我的代码与其他人进行比较,看看我做错了什么,但到目前为止,我所做的一切看起来都是正确的做法。
我想我正在寻找一种方法来测试我推进的goalViewController是否仍然打开并切换到它而不是分配一个新的。
我真的很感激对此的一些见解。 谢谢, 格雷格
P.S。
我实际上尝试在viewWillAppear方法中插入它。
`NSMutableArray *allControllers = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
NSLog(@"Controllers: %@",allControllers);`
当我在启动目标视图之间切换时,这是我得到的输出。 Splash View ID仍然是内容,但每次都会更改目标视图ID。
2011-11-21 01:14:51.388 Controllers: ("<SplashViewController: 0x64468c0>")
2011-11-21 01:14:51.389 Controllers: <SplashViewController: 0x64468c0>
2011-11-21 01:14:58.494 Controllers: <GoalViewController: 0x6458ad0>
2011-11-21 01:14:58.495 Controllers: (
"<SplashViewController: 0x64468c0>",
"<GoalViewController: 0x6458ad0>"
)
2011-11-21 01:15:06.898 Controllers: <SplashViewController: 0x64468c0>
2011-11-21 01:15:11.139 Controllers: <GoalViewController: 0x5771660>
2011-11-21 01:15:11.140 Controllers: (
"<SplashViewController: 0x64468c0>",
"<GoalViewController: 0x5771660>"
谢谢,Greg
答案 0 :(得分:0)
每次调用
时,您确实在创建一个新的控制器 [[GoalViewController alloc] initWithNibName:@"GoalViewController" bundle:nil]
我建议做的是在startButton方法之外创建一次GoalViewController(就像在父视图控制器的viewWillAppear
方法中一样),并将其保存为父对象的成员变量。然后,您可以将其推送并弹出您心中的内容,每次目标视图ID都将保持相同的指针。
不要忘记在解除父级或卸载父级时释放您的GoalViewController(不确定您是否使用ARC)。
希望此信息有所帮助!