How to prevent present modally an active controller?

落花浮王杯 提交于 2019-12-01 03:11:37

I think u will need to dismiss the LAST viewcontroller first before going back by present modal segue, the viewcontroller is active, so it crash:

Use this after call segue from mainVC or something u wanted to go back:

[self dismissViewControllerAnimated:NO completion:nil]

or

[[self presentingViewController] dismissViewControllerAnimated:NO completion:nil]

or use push segue, it auto add a back button that automatically add back function

Zaporozhchenko Aleksandr

I have found kind of solution for this

- (IBAction)menuButtonPressed:(id)sender
{
    [self.parentViewController presentViewController:self.menuAlert animated:YES completion:nil];
}

Alert view sometimes appears on menuVC, but it doesn't crash application and work normally. Answer was found there: Warning :-Presenting view controllers on detached view controllers is discouraged

There may be another case for other developers:

Is the target ViewController presented after a connection triggered by a button? The user may be clicking twice, making two connections and opening the same ViewController twice, if you have a shared instance of the said ViewController.

Prevent it by doing something like this:

var didSuccess = false

func success(result: LoginModel.Result) {
    if didSuccess {
        return
    }
    didSuccess = true
    present(MainTabBarController.sharedInstance, animated: true, completion: nil)
}

Or disabling the button during connection.

To prevent this exception. Simply just dismiss the currently showed ViewController to go back to the caller of the ViewController that you are dismissing:

self.dismiss(animated: true, completion: nil)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!