class_getClassMethod ritorna spesso pari a zero (sembra funzionare solo con i metodi di livello di classe)
-
26-09-2019 - |
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
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