avertissements obsolètes dans xcode et comment gérer la dépréciation

if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];} //post-iOS6.0 else {[self dismissModalViewControllerAnimated:YES];} //pre-iOS6.0 

Je fais le répond au code de sélecteur (ci-dessus) pour manipuler des methods obsolètes. De cette façon, mon application est compatible avec les anciennes versions d'iOS, mais je reçois des avertissements dans mon code indiquant: "'rejectModalViewControllerAnimated:' est obsolète: d'abord obsolète dans iOS 6.0" Je n'aime personnellement aucun avertissement dans mon code, mais Plus important encore, j'ai lu quelque part que Apple va se plaindre des avertissements dans votre code.

1) Apple se plaindra-t-elle des avertissements dans votre code?

2) Est-ce que je gère correctement les methods obsolètes?

3) Y at-il moyen de désactiver les avertissements de méthode obsolète?

    1. Apple ne connaît pas les avertissements de compilation que vous recevez avec votre code.

    2. Oui, vous manipulez cette pratique correctement. Clairement, dans ce cas, vous devez seulement faire cet effort si vous soutenez iOS avant 5.0. Mais, en général, la technique pour tester si une méthode peut être appelée et ensuite appeler le rendu approprié est absolument correcte.

    3. Si vous souhaitez désactiver l'avertissement, vous devez simplement supprimer temporairement l'avertissement, puis le réactiver en utilisant la syntaxe #pragma appropriée:

       if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) { //post-iOS6.0 [self dismissViewControllerAnimated:YES completion:nil]; } else { // pre-iOS6.0 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" [self dismissModalViewControllerAnimated:YES]; #pragma clang diagnostic pop } 

      En passant, si vous voulez savoir ce que le code -W est pour votre avertissement particulier, allez dans votre browser de journal, select la version récente qui a inclus l'avertissement, et développez le journal, et vous le verrez là:

      entrez la description de l'image ici

    Notez également que bien que vous puissiez supprimer l'avertissement comme je l'ai illustré ci-dessus, en pratique, vous avez rarement besoin de le faire. En utilisant votre exemple, si la cible de deployment iOS de votre projet était de 4,3, vous n'obtiendriez pas l'avertissement. Et si votre cible de deployment était 6.0 ou plus, vous obtiendriez cet avertissement, mais encore une fois, vous n'auriez probablement pas besoin de ce code conditionnel pour appeler dismissModalViewControllerAnimated car iOS 5.0 efficace, vous pouvez toujours utiliser dismissViewControllerAnimated .

    Le seul moment où vous devez supprimer cet avertissement dans votre code est si vous avez du code source, pour être inclus dans des projets futurs, pour lesquels vous ne savez pas quelle sera la cible de deployment. En utilisant votre exemple, si vous ne savez pas si le code ci-dessus sera inclus dans un projet avec une cible de deployment 4.3 ou une cible de deployment 5.0+. Dans ce cas, cette syntaxe est très utile. Mais, encore une fois, vous pouvez également utiliser des vérifications conditionnelles sur __IPHONE_OS_VERSION_MIN_REQUIRED , par exemple:

     #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0 if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) { //post-iOS5.0 [self dismissViewControllerAnimated:YES completion:nil]; } else { // pre-iOS5.0 [self dismissModalViewControllerAnimated:YES]; } #else [self dismissViewControllerAnimated:YES completion:nil]; #endif 
    1. Non
    2. Vous devez utiliser les methods les plus récentes à less que vous n'essayez spécifiquement de prendre en charge les anciennes versions d'iOS, vous devez alors utiliser la méthode décrite ci-dessus. "Une méthode identifiée comme obsolète a été remplacée et pourrait ne plus être supscope dans le futur."
    3. Si vous modifiez la cible de deployment dans votre cible d'application à 5.0, les avertissements obsolètes pour iOS 5 ne s'afficheront pas comme des erreurs.

    Si vous êtes vraiment intéressé par la rétrocompatibilité, il existe un excellent tutoriel de Ray Wenderlich ici

    Oui De nombreux avertissements sont présents et rejettent la vue modale pour corriger cela Remplacer:

    en ios 6 ce sont: –

    1. [self dismissViewControllerAnimated:NO completion:nil];

    2. [self presentViewController:vc animated:NO completion:nil];