2009-10-28 8 views
24

Intenté tanto JRSwizzle como MethodSwizzle. Recopilan bien en el simulador pero arrojan un montón de errores cuando intento compilar para Dispositivo (3.x)Método Swizzle en dispositivo de iPhone

¿Alguien ha tenido suerte en el iPhone? ¿Cuál es el truco?

TIA

Respuesta

54

El CocoaDev wiki tiene una extensa discusión sobre el método swizzling here. Mike Ash tiene una aplicación relativamente simple en la parte inferior de esa página:

#import <objc/runtime.h> 
#import <objc/message.h> 
//.... 

void Swizzle(Class c, SEL orig, SEL new) 
{ 
    Method origMethod = class_getInstanceMethod(c, orig); 
    Method newMethod = class_getInstanceMethod(c, new); 
    if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) 
     class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); 
    else 
    method_exchangeImplementations(origMethod, newMethod); 
} 

No he probado esto, simplemente porque el método swizzling que considerar como un proceso extremadamente peligroso y no he tenido la necesidad de utilizar todavía.

+3

gracias que funcionó. La clave con el uso de esto fue # import # import dizy

+0

Wiki link no worky – funkybro

+0

@funkybro - Gracias por señalarlo. Saqué una versión archivada de la página, antes de que fuera retirada. Cuando la wiki vuelva a aparecer, reemplazaré el enlace de archivo. –

Cuestiones relacionadas