【发布时间】:2011-03-31 12:34:26
【问题描述】:
我在标签栏控制器中有 3 个视图控制器。单击任何选项卡会在导航堆栈中加载其根视图控制器。
例如选项卡 1、选项卡 2 和选项卡 3。
导航堆栈 (tab2VC2) 中的第二个视图控制器有一个 tableView。
点击tab2 show VC in tab2,然后点击tab1,尝试进入它的rootVC。然后应用程序崩溃说
[用户详细信息VC 表视图:cellForRowAtIndexPath:]: 发送到已释放实例的消息 0xe0a23b0
如果我用动画 popToRootVC 那就没问题了。我发现在 tab2VC2 中调用了 viewDidAppear,其中调用了 tableView.reloadData,然后是 dealloac,似乎与此同时 reloadData 开始工作,表被释放。在动画的情况下,它需要一些时间,所以它不会崩溃。但是没有动画,它就会崩溃。 你认为,它是一个 iPhone 错误?还是我做错了?既然弹出到根控制器有一个没有动画的选项,它应该可以工作,不是吗?
#pragma mark Tab bar controller delegate
- (void)tabBarController:(UITabBarController *)tbController didSelectViewController:(UIViewController *)viewController {
int i = tbController.selectedIndex;
NSArray *mycontrollers = tbController.viewControllers;
[[mycontrollers objectAtIndex:i] popToRootViewControllerAnimated:NO];
}
【问题讨论】:
-
你能发布崩溃吗?只是这段代码没有用。
-
AFAIK 这个问题一直存在于 UIKit 中,直到 iOS 8(包括在内),从 iOS 9 开始,这个问题得到了解决(至少在我的应用程序中)。
标签: ios objective-c uinavigationcontroller uikit