繁体   English   中英

UiViewController - Pop不弹出

[英]UiViewController - Pop doesn't pop

我从另一个UIViewController按下按钮时显示UIControllerView子类,如下所示:

- (IBAction)openNextLevelViewController
{
    NSLog(@"openNextlevelViewController");

    [self.navigationController pushViewController:nextLevelViewController animated:YES];

}

并且应用程序将在按钮按下时从该视图返回,这会触发此方法:

-(IBAction) returnToStart {

    NSLog(@"returnToStart method called");
    [self.navigationController popViewControllerAnimated:YES];

}

问题是显示的视图没有在pop上被破坏/解除分配。 因此,当它被推送时,它不会执行viewDidLoad,这会启动一些变量。 这可能导致相关问题,其中,第二次,当用户按下返回按钮时,“弹出”不再导致返回到先前的控制器。

处理这个问题的最佳方法是什么? 我可以将初始化代码移动到“willAppear”方法,但似乎几乎可以随机调用。

好吧,它没有被释放,因为nextLevelViewController仍然被保留在其他地方。 最有可能在你的nextLevelViewController变量中。

- (IBAction)openNextLevelViewController
{
    NSLog(@"openNextlevelViewController");
    // assuming you have nib already set up
    UIViewController *nextLevelViewController = [[NextLevelViewController alloc] init]; 
    // RETAIN COUNT = 1

    // navigationController retains your controller
    [self.navigationController pushViewController:nextLevelViewController animated:YES]; 
    // RETAIN COUNT = 2

    // Don't need it any more let navigation controller handle it.
    [nextLevelViewController release]
    // RETAIN COUNT = 1 (by NavigationController)
}

进一步

-(IBAction) returnToStart {
    [self.navigationController popViewControllerAnimated:YES];
    // RETAIN COUNT = 0, dealloc will be called on your viewController, make sure to release all your retained objects.
}

现在当你的控制器被弹出时,它应该被释放(不应该在其他地方保留)。 下次调用openNExtLevelViewController时,无论如何都会初始化viewController的新实例。

我不喜欢在不再需要(显示)时释放viewController,而不是将其保存在内存中。 让navigationController和TabBarController尽可能地处理viewControllers。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM