roymckrank
roymckrank

Reputation: 699

Deprecated code in iOS 6 fallback to iOS 5

I have this custom back button:

- (IBAction)backToMenu:(id)sender {

[self.presentingViewController dismissModalViewControllerAnimated:YES]; 

}

Testing my app in the iOS 6 simulator says dismissModalViewControllerAnimated is deprecated, and I must use dismissViewControllerAnimated instead, so, how I can use the iOS 6 code and fallback to iOS 5

I have tried this:

if([self respondsToSelector:@selector(presentingViewController:animated:completion:)])
    [self.presentingViewController dismissViewControllerAnimated:(YES) completion:nil];
else if([self respondsToSelector:@selector(presentingViewController:animated:)])
    [self.presentingViewController dismissModalViewControllerAnimated:YES];
else
    NSLog(@"Oooops, what system is this ?!!! - should never see this !");

But without results, I'm seeing the NSLog and no view is dismissed, any hints?

Thank you in advance.

Upvotes: 0

Views: 5150

Answers (2)

Nithinbemitk
Nithinbemitk

Reputation: 2740

Use [self dismissViewControllerAnimated:YES completion:Nil]; for iOS 6

Upvotes: 5

Tim
Tim

Reputation: 60150

The selectors you're testing for aren't the same as the selectors you're calling. Try the following:

if([self.presentingViewController respondsToSelector:@selector(dismissViewControllerAnimated:completion:)])
    [self.presentingViewController dismissViewControllerAnimated:(YES) completion:nil];
else if([self.presentingViewController respondsToSelector:@selector(dismissModalViewControllerAnimated:)])
    [self.presentingViewController dismissModalViewControllerAnimated:YES];
else
    NSLog(@"Oooops, what system is this ?!!! - should never see this !");

The important difference is that the object you're calling - self.presentingViewController, in this case - is different from the method you're calling on that object. We call the latter a selector, and that's the bit you want to put inside the @selector() wrapper.

Upvotes: 6

Related Questions