This behaviour is perfectly natural, for the following reasons:
1) shouldPerformSegueWithIdentifier
is used to make sure that a segue that has been set up in Storyboards should be triggered, so it only gets called in the case of Storyboard Segues and gives you the chance to not actually perform the segue.
2) When you call performSegueWithIdentifier
yourself, shouldPerformSegueWithIdentifier
is not called because it can be assumed that you know what you are doing. There would be no point in calling performSegueWithIdentifier
but then return a NO
from shouldPerformSegueWithIdentifier
.