9
votes

Est-il possible d'attraper tous les appels sélecteurs et de les rediriger au moment de l'exécution

Je veux faire quelque chose un peu de hacky.

Lorsque nous essayons d'appeler une méthode sur une classe où n'est pas défini, nous obtenons généralement une erreur, par exemple P>

@implementation MyClass

    - (void) performSelector(SEL):selector {

          // Check if the method exists
          if (![self respondsToSelector:selector]) {
              // Handle unimplemeted selector
              NSLog(@"No method called %@", selector);
          } 

          // Otherwise proced as normal
          else {
              [super performSelector:selector];
          }
    }

@end


0 commentaires

4 Réponses :


0
votes

Je suppose que vous pouvez essayer de créer une nouvelle catégorie pour "NsObject" et écraser cette méthode spécifique comme celle-là. Quoi qu'il en soit, gardez à l'esprit que Apple recommande d'utiliser des catégories pour écraser les méthodes, mais pour ajouter de nouvelles fonctionnalités, il est donc un peu piraté. Cependant, je ne suis pas sûr que cela se débarrasse de la préavis ...


0 commentaires

7
votes

Méthode de remplacement: - [MyClass ne contient pasOrcognectelector:] et appelez ce que vous voulez.

C'est ce que nsmanagedObject fait pour obtenir / définir les propriétés de données de base.


0 commentaires

11
votes

Pourquoi ne pas simplement remplacer le DONNOTECOREMIZELORYELLECTOR: Méthode sur NsObject (en supposant que vous y hérissez, ce que vous devriez être)?


2 commentaires

Parfait. C'est ce que je cherchais, je savais qu'il y aurait un moyen.


@PaulBiley Vous avez eu de la chance, 2 minutes après moi avec exactement la même réponse et votre réponse a été acceptée :)



1
votes

Je ne suis pas clair si vous essayez d'intercepter des messages envoyés à une classe ou à une instance d'une classe. En tout état de cause, il s'agit peut-être d'examiner / rechercher des sujets de «transfert de message» et de «messages de transfert». Voir également le renvoi de NsObject et la section du Guide PGMG d'exécution d'Apple sur le renvoi des messages http://developer.apple.com/ Bibliothèque / Mac / # Documentation / Cocoa / Conceptuel / ObjcruntimeGuide / Articles / OCRTFORWARDING.HTML

Celles-ci m'ont obtenu la réponse que je cherchais et je ne les ai pas vues mentionnées ailleurs sur cette question.


0 commentaires