Domanda

Al momento sto cercando di usare un po 'di codice generato da http://sudzc.com/ Questo codice non si adatta perfettamente ai miei servizi web, così ho cercato di aggiungere categorie ad alcune delle classi generate e di scambiare le loro implementazioni con quelli originali utilizzando method_exchangeImplementations da "objc / runtime.h". (Ho potuto modificare il codice generato direttamente, ma voglio evitarlo).

Ecco il codice eseguo in MyAppAppDelegate - metodo 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);

Come affermato nella mia interrogazione, quasi tutti coloro class_getClassMethod stanno tornando a zero ... ho usato il debugger quindi so 'theClass' è giustamente impostata. L'unico metodo essendo trovato sono quelli della classe sapone, che sono entrambi livello di classe (+) metodi. Ma da vari esempi sulla rete ho concluso che dovrebbe funzionare per gli altri così ...

Ecco le mie include per 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"

Ho provato le mie categorie troppo e funzionano, posso chiamare i metodi di categoria da un oggetto 'originalClass'.

suppongo che sto facendo qualcosa di sbagliato, ma non riesco a vedere che cosa ... O forse class_getClassMethod è infatti dovrebbe funzionare solo per i metodi livello di classe?

Ho e ultima cosa, Im in via di sviluppo sul simulatore, non il dispositivo:)

Ogni pensiero è il benvenuto!

Grazie

P.B

È stato utile?

Soluzione

Non importa, il mio errore, class_getClassMethod è infatti dovrebbe funzionare solo per i metodi livello di classe (come dice il nome)

Per i metodi di istanza, l'uso ... class_getInstanceMethod ...:)

Ci scusiamo per il disturbo

P.B

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top