28 votes

Transfert dynamique: supprimer l'avertissement de mise en œuvre incomplète

J'ai une classe d'exposer certaines méthodes, dont la mise en œuvre est assurée par un objet interne.

Je suis de l'avant à l'aide de l'invocation de l'expédition à l'exécution des appels de méthode à l'intérieur de l'objet, mais XCode est de se plaindre, car il est impossible de trouver une mise en œuvre de la déclaration de méthodes.

J'ai trouvé quelques autres questions similaires sur, mais tous ont été résolus avec un changement de conception.

Je ne veux pas avoir une discussion sur la conception ici, mais si quelqu'un a d'autres suggestions à ce sujet j'ai une question ouverte sur la Révision du Code, ce qui est plus approprié pour ce genre de discussions.

Ma question est ici de savoir si une méthode pour éteindre l' Incomplete Implementation d'avertissement dans XCode existe.

60voto

Popeye Points 5478

Vous pouvez supprimer Incomplete Implementation par l'ajout de mises en garde

  #pragma clang diagnostic ignored "-Wincomplete-implementation"

juste au-dessus de l' @implementation

Espérons que cette aide

MODIFIER

Après s'être dit dans les commentaires que cela n'a pas fonctionné pour quelqu'un et de trouver la raison était parce que c'était un autre avertissement qu'ils obtenaient j'ai fait un peu de jouer autour et a été en mesure d'y résoudre problème alors j'ai pensé que je voudrais mettre à jour cette réponse à inclure le leur, et pour GCC ignore ainsi. Donc pour la question, pour l' @Tony le suivant devrait fonctionner

  #pragma clang diagnostic ignored "-Wprotocol"

Pour tous ceux qui veulent connaître l' GCC version de compilateur, il est

  #pragma GCC diagnostic ignored "-Wprotocol"

  #pragma GCC diagnostic ignored "-Wincomplete-implementation"

Je vais aussi faire un point que tous ces diagnotstic ignores peut également être fait en spécifiant le paramètre de fichier par fichier en allant à l' XCODE Project >> Target >> Build Phases >> Compile Sources et l'ajout d'un compilateur-drapeau de sorte que vous voudrais juste ajouter -Wprotocol ou Wincomplete-implementation ou quel que soit le compilateur drapeau dont vous avez besoin.

Espérons que cette mise à jour permet à tous si plus besoin, je mettrai à jour ma réponse à inclure.

EDIT 2

Je faisais un peu plus de creuser autour de sur ce un est venu à travers la Clang Compliler Manuel de l'Utilisateur , alors j'ai pensé que ce serait intéressant et utile pour toute personne ayant des questions autour de cette zone.

J'ai aussi trouvé une autre façon que vous pouvez utiliser ces #pragma diagnostic ignores , et c'est vous peut - push et pop eux donc si vous voulais simplement ignorer une section particulière du fichier et non pas tous, alors vous pouvez faire ce qui suit

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wmultichar"

    // And pop the warning is gone.
    char b = 'fa';

    #pragma clang diagnostic pop

N'oubliez pas que toutes ces #pragma de la compilation ignore peut être utilisé avec GCC ainsi donc, la partie ci-dessus

    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wmultichar"

    // And pop the warning is gone.
    char b = 'fa';

    #pragma GCC diagnostic pop

L' push et pop semblent fonctionner avec tous les diagnostic ignores j'ai essayé jusqu'à présent.

Un autre est

    #pragma clang diagnostic ignored "UnresolvedMessage"
    #pragma GCC diagnostic ignored "UnresolvedMessage"

L'un pour la suppression de variables inutilisées est

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wunused-variable"
        NSString *myUnusedVariable;
    #pragma clang diagnostic pop

et la version de GCC être

    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wunused-variable"
        NSString *myUnusedVariable;
    #pragma GCC diagnostic pop

Un peu plus pour ne pas tenir compte des avertissements de la unavailableInDeploymentTarget

    #pragma clang diagnostic push
    #pragma ide diagnostic ignored "UnavailableInDeploymentTarget"
        leftEdge.barTintColor = rightEdge.barTintColor = self.toolbar.barTintColor;
    #pragma clang diagnostic pop

et performSelector fuites

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    [target performSelector:cancelAction withObject:origin];
    #pragma clang diagnostic pop

et obsolètes déclarations

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
        button = [[UIBarButtonItem alloc] initWithTitle:buttonTitle style:UIBarButtonItemStyleBordered target:self action:@selector(customButtonPressed:)];
    #pragma clang diagnostic pop

21voto

Martin R Points 105727

Vous pouvez déclarer les méthodes dans une interface de catégorie de classe:

 @interface MyClass (ForwardedMethods)

- (void)doSomething;

@end
 

(sans implémentation pour la catégorie). Ensuite, Xcode ne se plaindra plus d'une "implémentation incomplète".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X