29
Methode Swizzling funktioniert gut zum Beispiel Methoden. Jetzt muss ich eine Klassenmethode wechseln. Irgendeine Idee, wie es geht?Wie man eine Klassenmethode auf iOS swizzle?
dies versucht, aber es funktioniert nicht:
void SwizzleClassMethod(Class c, SEL orig, SEL new) {
Method origMethod = class_getClassMethod(c, orig);
Method newMethod = class_getClassMethod(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);
}
Mmm ... Sagen wir, wir haben statt 'Class cc = object_getClass ((id) c)'. Es ist verständlich, dass Sie die Methode zu 'cc' hinzufügen müssen, aber warum haben Sie die Klassenmethode von' cc' genommen? Soll die Klassenmethode nicht von 'c' kommen? Ich bin verwirrt ... – Yuji
Yuhi, du hast Recht, ich habe den Code geändert, um die Methodenauflösung für die ursprüngliche Klasse, nicht die Meta-Klasse zu tun. Die alte Lösung funktionierte auch, also kümmerte ich mich nicht wirklich darum. –
Mein schlechtes. Ich habe object_getClass in objc_getClass vertippt. Ich lösche meine Antwort in einer Sekunde. –