我在一个应用程序上工作,我的视图出现问题[Will / Did]在返回应用程序时消失方法没有被触发。
案例是,我有UINavigationController,它上面有两个视图控制器。当用户按下主页按钮时,用户退出。当他稍后返回应用程序时,以下(简化)代码在我的AppDelegate中运行:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[(UINavigationController *)self.window.rootViewController popToRootViewControllerAnimated:NO];
[self.window.rootViewController presentModalViewController:loginViewController animated:NO];
}
当我弹出导航控制器堆栈上的视图控制器时,我希望调用view[will|did]disappear
方法。然而,事实并非如此,因为当iOS要解雇这些方法时,它们(显然)不再出现在屏幕上。似乎模态视图控制器已经接管了。
如果我没有提供模态视图控制器,则会按预期调用view[will|did]disappear
方法。
我的问题是:如果我想调用view[will|did]disappear
方法,那么我该如何构建我的代码呢?有没有更好的地方来呈现我的模态loginViewController?
修改:
为了更清楚地展示我的问题,我在这里创建了一个非常简单的测试项目:https://github.com/JohanVase/ModalViewCauseMissingViewDisappearCalls。请尝试多次按照应用中的说明操作,看看我的viewWillDisappear方法中没有发布“资源”。
答案 0 :(得分:7)
我终于向Apple技术支持部门提出了同样的问题。他们得出结论,这是iOS中的一个错误,因此我向Apple提交了一份错误报告。同样的错误似乎出现在iOS 6和最新的iOS 7(Beta 5)中。
Apple技术支持建议如下:
作为一种变通方法,您可以将清理代码移动到单独的方法中 然后AppDelegate会在导航控制器上调用它 顶视图控制器,在它弹出整个导航堆栈之前。
但是,我认为这在视图控制器中暴露了太多我的细节,所以我选择使用willMoveToParentViewController:
来实现它。当视图控制器从其父节点中删除时,将调用此方法,并且 正确调用。