使用UIAlertController时应用程序崩溃

时间:2016-03-28 10:05:52

标签: ios uialertcontroller

页面上有一个退出按钮,点击后我想发布ok-cancel提示,这是我的代码:

UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"Tips" message:@"Sign out?" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
}];
[alertVC addAction:cancelAction];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
    [self dismissViewControllerAnimated:YES completion:nil];

}];
[alertVC addAction:okAction];
[self presentViewController:alertVC animated:YES completion:nil];

App因崩溃而崩溃:由于未捕获的异常'UIViewControllerHierarchyInconsistency'而终止应用程序,原因:'子视图控制器:应该有父视图控制器:但是请求的父级是:' 我将代码复制到一个简单的演示中。它运作良好,但它在我的项目中崩溃。我尝试使用不推荐使用的UIAlertView,它没关系。我使用UIAlertController的任何问题

1 个答案:

答案 0 :(得分:0)

从异常开始,我认为您的视图控制器的层次结构不正确。 所以这是显示alertviewcontroller的最简单方法。

    [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:yourAlertController animated:YES completion:nil];

或者让你的应用程序获得最顶级的viewController,然后在该viewController上显示alertViewController。以下是在您的应用中找到最顶层viewController的方法。

- (UIViewController*) topMostController
{
    UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;

    while (topController.presentedViewController) {
        topController = topController.presentedViewController;
    }

    return topController;
}