12
votes

Puis-je utiliser une méthode de classe comme rappel de délégué

dans une méthode de la méthode de classe I Déclarez les éléments suivants:

    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Hello" 
                                                   message:@"World"
                                                  delegate:self
                                         cancelButtonTitle:@"Cancel" 
                                         otherButtonTitles:@"Done", nil];


4 commentaires

Vous pouvez essayer le nom de la classe au lieu de soi, qui fait référence à l'instance.


Voir également la réponse à Stackoverflow.com/questions/1781046/... . C'est pertinent je pense.


Dans une méthode de classe Soi se réfère à la classe et non à un objet de la classe. Ce code est-il exécuté?


J'ai édité méthode statique et le modifié en Méthode de classe Merci pour la remarque. Je suppose que c'est mon fond de java me hantant :-)


3 Réponses :


11
votes

Premièrement, je suppose par des méthodes "statiques", vous voulez dire des méthodes de classe (déclaré avec + au lieu de - ).

"Le compilateur ne se plaint pas" à propos de l'objectif-c ne vous dis pas toujours beaucoup. Tout cela signifie vraiment que vous avez convaincu le compilateur que tout devrait (ou au moins pourrait ) fonctionner au moment de l'exécution.

À la fin, si l'objet que vous fournissez en tant que délégué répond aux bons messages, le compilateur ne s'en souciera pas à ce que c'est une classe (et le temps d'exécution). Dans ce cas, vous fournissez auto à partir d'une méthode de classe. C'est comme si vous avez tapé [classe myClass] .

Je pense qu'il est probablement discutable si c'est ce que vous devriez faire - mais c'est probablement en dehors des limites de votre question.


0 commentaires

14
votes

Je voudrais partager certaines de mes conclusions:

  1. Peu importe si je déclare si je déclare le délégué comme celui-ci délégué: auto code> ou délégué: [Classe MyClass] Code> P> P> P>

  2. Cependant, il importe comment je déclare la méthode: p>

    cela fonctionne strong> p>

    // Mind the `-` sign at the start of the line.
    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
        // Some Actions here
    }
    


5 commentaires

Oui, auto et [Classe MyClass] sont équivalents dans une méthode "myClass". Si vous voulez que votre classe elle-même soit le délégué, vous devez alors déclarer cela comme une méthode de classe. La documentation décrit comment mettre en œuvre la méthode d'instance, à laquelle je pense est à peu près universellement "comment ça se fait". À la fin, ce qui compte vraiment, c'est que quel que soit l'objet que vous fournissez, le délégué répond à «AlertView: clickedbuttonatidex:« Sélecteur ». Donc, oui, la réponse est toujours que vous peut le faire. Si vous devriez être différent.


Wow! Pas dans un million d'années aurait-je estimé que la méthode de la déléguée en une méthode de classe serait la voie à suivre. Merci merci! J'ai perdu plus de 5 heures en essayant de résoudre un problème similaire. ... n'avait pas besoin de nscondition ou de spectselector ou quoi que ce soit!


J'utilise une méthode de classe comme mon mfmailcendévievievieviewontrollerdélégate , et je reçois cet avertissement: Pointeur incompatible Types d'affectation à "ID _Nullable" de 'Classe _Nullable' My @ Interface a , mais comment puis-je le faire pour une méthode de classe et éviter l'avertissement?


@Jeff. Ma réponse a 8 ans alors je suis un peu hors de pratique. Je vous suggère d'ouvrir une nouvelle question et peut-être de référence à cet article. Je suis désolé de ne pas pouvoir vous offrir une meilleure réponse.


@Besi. Merci. J'ai trouvé une solution de contournement raisonnable (il se débarrasse de l'avertissement). J'ajoute (id) Ainsi, contrôleur.mailcomposedelegate = (ID) [Classe auto];



1
votes

Oui, vous pouvez !!! Une classe est également un objet.


0 commentaires