1

Im actuellement en train d'essayer d'utiliser du code généré de http://sudzc.com/ Ce code n'est pas parfaitement adapté à mes services Web, j'ai donc essayé d'ajouter des catégories à certains des générés classes et d'échanger leurs implémentations avec celles d'origine en utilisant method_exchangeImplementations de "objc/runtime.h". (Je pourrais modifier le code généré directement mais je veux l'éviter).class_getClassMethod renvoie souvent nil (semble fonctionner uniquement avec les méthodes de niveau classe)

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 ces class_getClassMethod reviennent nul ... J'ai utilisé le débogueur donc je sais « theClass » est correctement défini. La seule méthode trouvée est celle de la classe Soap, qui sont toutes deux des méthodes de niveau classe (+). Mais à partir de divers exemples sur le net, je conclus qu'il devrait travailler pour les autres et ...

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" 

J'ai testé aussi mes catégories et ils travaillent, Je peux appeler les méthodes de catégorie à partir d'un objet 'originalClass'.

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

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

Toute pensée est la bienvenue!

Merci

PB

Répondre

9

Peu importe, 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

PB