Pergunta

Atualmente estou tentando usar algum código gerado de http://sudzc.com/Esse código não está perfeitamente adaptado aos meus serviços da Web, então tentei adicionar categorias a algumas das classes geradas e trocar suas implementações com as originais usando o método_exchangeImplementations de "objc/runtime.h". (Eu poderia modificar diretamente o código gerado, mas quero evitá -lo).

Aqui está o código que executo no MyAppAppDelegate - Método de 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);

Conforme declarado na minha pergunta, quase todos esses Class_getClassMethod estão retornando nil ... Eu usei o depurador, então eu sei que 'TheClass' está definido corretamente. O único método encontrado são os da classe SOAP, que são métodos de nível de classe (+). Mas de vários exemplos na rede, concluí que ela deveria funcionar para os outros também ...

Aqui estão os meus inclui para 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"

Também testei minhas categorias e elas funcionei, posso chamar os métodos de categoria de um objeto 'originalclass'.

Suponho que estou fazendo algo errado, mas não consigo ver o que ... ou talvez Class_GetclassMethod de realmente funcionar apenas para métodos de nível de classe?

Ho e a última coisa, estou desenvolvendo no simulador, não no dispositivo :)

Qualquer pensamento é bem -vindo!

Obrigado

Pb

Foi útil?

Solução

Não importa, meu erro, Class_getClassMethod deve realmente funcionar apenas para métodos de nível de classe (como o nome implica)

Por exemplo, métodos, use ... class_getInstanceMethod ... :)

Desculpe o incómodo

Pb

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top