Class_getClassmethod часто возвращает Nil (кажется, работает только с методами уровня класса)

StackOverflow https://stackoverflow.com/questions/3422693

Вопрос

Я в настоящее время пытаюсь использовать некоторые сгенерированные код из http://sudzc.com/Этот код не идеально адаптирован к моим веб-сервисам, поэтому я попытался добавить категории некоторых из сгенерированных классов и обменять свои реализации с оригинальными, использующими метод_Екхэнгементы от «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 возвращаются Nil ... Я использовал отладчик, поэтому я знаю, что «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"

Я тоже проверил свои категории, и они работают, я могу вызвать методы категории из объекта «Оригиналкласс».

Я полагаю, я делаю что-то не так, но я не вижу, что ... или, может быть, Class_getclassmethod действительно должен работать только для методов уровня класса?

Хо и последнее, я разрабатываю на симуляторе, а не на устройство :)

Любая мысль добро пожаловать!

Спасибо

Преступник

Это было полезно?

Решение

Неважно, моя ошибка, Class_getClassmethod действительно должна работать только для методов уровня класса (как подразумевает имя)

Например, методы, используйте ... class_getinstancemethod ... :)

Извините за беспокойство

Преступник

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top