12
votes

appeler des méthodes de délégation facultatives

J'ai créé un délégué pour une classe xxx pré>

maintenant dans mon objet de jeu j'ai appelé cette méthode: p> xxx pré>

alors maintenant, si J'initie cet objet n'importe où et définir le délégué tout fonctionne bien jusqu'à ce que le gamesté soit appelé, car il n'est pas implémenté dans l'objet principal où l'objet de jeu est créé (car sa facultative). P>

J'ai essayé des variations de Ceci P>

if(![self.delegate respondsToSelector: @selector(gameStarted)]) {
    //[self.delegate gameStarted];
}


0 commentaires

3 Réponses :


18
votes

omettez la négation à partir de votre si instruction: xxx


2 commentaires

Oh mon Dieu: D Je faisais d'abord utilisé cette déclaration pour un retour rapide si cela ne répond pas à, puis je viens de la copier pour cette méthode. quelle erreur stupide. Merci


Notez que votre délégué devra être conforme à NsObject: @protocol XXX pour que cela fonctionne



0
votes

Vérification Si un délégué met en œuvre une méthode facultative, puis l'appelant est un tel modèle commun que j'utilise un préprocesseur macro Safe_Call qui vérifie répondselector: puis appelle la méthode .

La macro est: xxx

et il est utilisé comme ceci: xxx

note que cette version fonctionne seulement avec des méthodes sans paramètres.

À l'origine, il a été mis en œuvre comme une fonction C, mais cela provoque des avertissements avec SectacleSelector fuites lors de l'utilisation de l'ARC. En tant que macro de préprocesseur, cela fonctionne exactement comme prévu.


0 commentaires

1
votes

Pour accomplir cela à Swift, je vous recommande ce qui suit: xxx

puis pour appeler le en option sur votre délégué objet, simple Utilisez si délégué.OptionalMethod? () {}


0 commentaires