Set a breakpoint on the last line to check vc (as well as storyboards) is not zero.
presentModalViewController will fail if its viewController argument is zero.
If both values ββare zero, your storyboard name is most likely incorrect (less likely).
If only vc is nil, then the identifier is incorrect (either in the code or in the storyboard). Make sure the VC Storyboard ID (as shown in the screenshot) matches your description. Usually there is no choice of a class name for this (since you may have several instances of this class in your storyboards).
The storyboard identifier is case sensitive and must be unique. I believe that the right way to install it is to enter a name in this field after selecting the view controller and clicking the "return to end" button (do not just click on the field). I noticed that some corruption occurs in storyboards when converting from Xcode 4 to 5 and vice versa, so help with plist / xml can also help.

Edit: It is also important when this is called, see presentModalViewController does not work . Make sure that the view controller receiving the message has already been shown (i.e. called in viewDidAppear, not viewDidLoad).
As mentioned by Abdullah, you should probably abandon the deprecated method in order to:
[self presentViewController:vc animated:YES completion:nil];
In this case, the termination block can be nil without problems, but vc should not be.
owenfi
source share