В настоящее время я пытаюсь использовать некоторый сгенерированный код из http://sudzc.com/ Этот код не идеально адаптирован к моим веб-службам, поэтому я попытался добавить категории к некоторым из сгенерированных классов и обменять их реализации с исходнымииспользуя method_exchangeImplementations из "objc / runtime.h".(Я мог бы изменить сгенерированный код напрямую, но я хочу избежать его).
Вот код, который я выполняю в MyAppAppDelegate - метод 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);
Как указано в моем вопросе, почти всеиз этих class_getClassMethod возвращают ноль ... Я использовал отладчик, поэтому я знаю, что theClass установлен правильно.Единственным найденным методом являются методы класса Soap, которые оба являются методами уровня класса (+).Но из различных примеров в сети я пришел к выводу, что это должно работать и для других ...
Вот мои включения для 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"
Я также проверил свои категориии они работают, я могу вызвать методы категории из объекта 'originalClass'.
Я полагаю, что я делаю что-то не так, но я не вижу, что ... Или, возможно, class_getClassMethod действительно должен работатьтолько для методов класса?
Но, наконец, я занимаюсь разработкой на симуляторе, а не на устройстве:)
Любая мысль приветствуется!
Спасибо
PB