Question

Im en train d'essayer d'utiliser un code généré à partir de http://sudzc.com/ Ce code n'est pas parfaitement adapté à mes services web, j'ai donc essayé d'ajouter des catégories à quelques-unes des classes générées et d'échanger leurs mises en œuvre avec les originaux en utilisant method_exchangeImplementations de « objc / runtime.h ». (Je pouvais modifier le code généré directement, mais je veux éviter).

Voici le code que je surExécuterdans MyAppAppDelegate - Méthode applicationDidFinishLaunching

Class theClass = [CBMayaIPhoneUser class];
Method originalMethod = class_getClassMethod(theClass, @selector(initWithNode:));
Method categoryMethod = class_getClassMethod(theClass, @selector(initWithAllStringNode:));
method_exchangeImplementations(originalMethod, categoryMethod);

theClass = [Soap class];
originalMethod = class_getClassMethod(theClass, @selector(getNodeValue:withName:));
categoryMethod = class_getClassMethod(theClass, @selector(getHrefNodeValue:withName:));
method_exchangeImplementations(originalMethod, categoryMethod);

theClass = [SoapRequest class];
originalMethod = class_getClassMethod(theClass, @selector(send));
categoryMethod = class_getClassMethod(theClass, @selector(sendIgnoringCertificate));
method_exchangeImplementations(originalMethod, categoryMethod);
originalMethod = class_getClassMethod(theClass, @selector(connectionDidFinishLoading:));
categoryMethod = class_getClassMethod(theClass, @selector(connectionDidFinishLoadingAndSentBody:));
method_exchangeImplementations(originalMethod, categoryMethod);

Comme indiqué dans ma question, presque tous les class_getClassMethod reviennent nul ... J'ai utilisé le débogueur donc je sais « theClass » est à juste titre défini. La seule méthode étant trouvé sont ceux de la classe de savon, qui sont à la fois des méthodes de niveau classe (+). Mais à partir de divers exemples sur le net I a conclu qu'il devait travailler pour les autres aussi ...

Voici ma comprend pour MyAppAppDelegate.m:

#import "MyAppAppDelegate.h"
#import "RootViewController.h"
#import "MyGlobalVariables.h"
#import "MyWebServiceExample.h"
#import "Soap+Href.h"
#import "SoapRequest+Certificate.h"
#import "CBMayaIPhoneUser+AllString.h"
#import "objc/runtime.h"

Je l'ai testé mes catégories aussi, et ils travaillent, je peux appeler les méthodes de la catégorie d'un objet « originalClass ».

Je suppose que je fais quelque chose de mal, mais je ne peux pas voir ce que ... Ou peut-être class_getClassMethod est en effet censé fonctionner uniquement pour les méthodes de niveau de classe?

Ho et dernière chose, Im développer sur le simulateur, et non l'appareil:)

Toute pensée est la bienvenue!

Merci

P.B

Était-ce utile?

La solution

Qu'à cela ne tienne, mon erreur, class_getClassMethod est en effet censé fonctionner uniquement pour les méthodes de niveau de classe (comme son nom l'indique)

Pour les méthodes d'exemple, l'utilisation ... class_getInstanceMethod ...:)

Désolé pour la peine

P.B

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top