La nouvelle méthode est:
[self dismissViewControllerAnimated:NO completion:nil];
Le verbe modal a été supprimé; Comme il l'a été pour la présentation d'appel d'API:
[self presentViewController:vc animated:NO completion:nil];
Les raisons ont été discutées dans la 2012 de la WWDC Session 236 - L'Évolution de Vue des Contrôleurs sur iOS Video. Essentiellement, la vue des contrôleurs présenté par cette API ne sont plus toujours modal, et depuis qu'ils ont été l'ajout d'un gestionnaire d'achèvement c'était un bon moment pour le renommer.
En réponse au commentaire de Marc:
Quelle est la meilleure façon de soutenir tous les appareils 4.3 et au-dessus? La nouvelle
la méthode ne fonctionne pas dans la version iOS4, encore l'ancienne méthode est déconseillée dans iOS6.
Je me rends compte que c'est presque une question distincte, mais je pense que ça vaut la peine de mentionner, puisque le monde n'a pas l'argent pour mettre à niveau tous leurs appareils tous les 3 ans, donc beaucoup d'entre nous ont certains anciens (pré 5.0) des dispositifs. Toujours, autant que cela me fait mal de le dire, vous devez vous demander si cela vaut la peine de ciblage est inférieur à 5,0. Il y a beaucoup de nouveau et cool Api non disponible ci-dessous 5.0. Et Apple est en permanence rendant plus difficile la cible; armv6 soutien est passé de Xcode 4.5, par exemple.
Afin de cibler au-dessous de 5.0 (tant que la fin du bloc est nul) utilisez la poire respondsToSelector
: la méthode.
if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){
[self presentViewController:test animated:YES completion:nil];
} else {
[self presentModalViewController:test animated:YES];
}
En réponse à un autre commentaire de la part de Marc:
Qui pourrait être tout à fait beaucoup de Si les déclarations dans mon application!...J'ai été
la pensée de la création d'une catégorie qui résume ce code,
la création de la catégorie sur UIViewControler me faire rejeté?
et une de Plein Décent:
...est-il un moyen de configurer manuellement que de ne pas présenter un avertissement du compilateur?
Tout d'abord, non, la création de la catégorie sur UIViewController
dans et de lui-même n'obtiendrez pas votre application rejetée, à moins que cette catégorie de méthode appelée Api privées ou quelque chose de similaire.
Une catégorie de la méthode est extrêmement bon endroit pour ce type de code. Aussi, puisqu'il n'y aurait qu'un appel à l'API obsolètes, il y aurait seulement un avertissement du compilateur.
Pour l'adresse Complète Décent commentaire(question), oui, vous pouvez supprimer les avertissements du compilateur manuellement. Voici un lien vers une réponse sur DONC sur ce sujet. Une catégorie de méthode est également un excellent endroit pour supprimer un avertissement du compilateur, puisque vous êtes seulement la suppression de l'avertissement dans un seul endroit. Vous ne voulez certainement pas à aller autour de taire le compilateur bon gré mal gré.
Si je devais écrire une simple catégorie de méthode pour cela, il pourrait être quelque chose comme ceci:
@implementation UIViewController (NJ_ModalPresentation)
-(void)nj_presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion{
NSAssert(completion == nil, @"You called %@ with a non-nil completion. Don't do that!",NSStringFromSelector(_cmd));
if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){
[self presentViewController:viewControllerToPresent animated:flag completion:completion];
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[self presentModalViewController:viewControllerToPresent animated:flag];
#pragma clang diagnostic pop
}
}
@end