Meaning of Warning "while a presentation is in progress!"

When I am integarting the Instagram in my project. I am getting a image from UIImagePickerController and after it i want to send it to Instagram But when I am sending image to Instagram by UIDocumentInteractionController delegate method presentOptionsMenuFromRect:inView: animated: like this

[documentInteractionController presentOptionsMenuFromRect:CGRectZero inView:self.view animated:YES];

The warning comes Warning: Attempt to present <_UIDocumentActivityViewController: 0x7584780> on while a presentation is in progress!
The application is not Crashing. But I am not getting the Problem. Why this warning comes and what It means. I searched on Internet and read questions about this but not got any answer. Help me !!


Solution 1:

// Breaks
[viewController1 dismissViewControllerAnimated:YES completion:NULL];
[self presentViewController:viewController2 animated:YES completion:NULL];

// Does not break
[viewController1 dismissViewControllerAnimated:YES completion:^{
    [self presentViewController:viewController2 animated:YES completion:NULL];
}];

The Swift 3 version of the above code would look like this:

// Breaks
viewController1.dismiss(animated: true)
present(viewController2, animated: true)

// Does not break
viewController1.dismiss(animated: true) {
    present(viewController2, animated: true)
}

Note the use of the completion handler in the second example above.
It only presents viewController2 after viewController1 has been fully dismissed.

Solution 2:

For those needing/wanting the swift 3 version, here it is

viewController1.dismiss(animated: true, completion: {
    self.present(self.viewController1, animated: true)
})

viewController1 is the viewcontroller you want to present.

Solution 3:

It means you are presenting or dismissing UIImagePickerController and trying to present UIDocumentInteractionController, while first presentation or dismissing is not completed.

Solution 4:

This means that you are presenting 2 ViewControllers at the same time. Call your delegate after the first presentation is completed.