2

Ich habe kürzlich mit dem iOS 5 SDK auf Lion und Xcode 4.3.1 aktualisiert, und die Freigabebibliothek ShareKit ist kaputt - sie hat die Methode swizzling für ihren E-Mail-Handler verwendet. Anscheinend hat Apple banned oder zumindest versucht, die Methode Swizzling auslaufen zu lassen.ShareKit Methode swizzling in Lion/Xcode 4.3.1?

ShareKit importiert eine Datei </usr/include/objc/objc-class.h>, die nicht mehr existiert, und definiert eine eigene Methode Swizzling-Methode SHKSwizzle. Es verwendet diese MFMailComposeViewController ‚s viewDidDisappear: Methode zu ändern, wie folgt:

SHKSwizzle([MFMailComposeViewController class], @selector(viewDidDisappear:), @selector(SHKviewDidDisappear:)); 

Was denken Sie ist der beste und einfachste Weg, dies zu umgehen?

+2

Anstatt '/ usr/include/objc/objc-class.h' einzuschließen, schließen Sie' objc/objc-class.h' ein und Sie sind golden. –

+0

Das gibt es auch nicht ... – Luke

Antwort

0

Das Swizzling wird nur für die E-Mail-Freigabe verwendet. Verwenden Sie MFMailComposeViewController selbst und entfernen Sie den Swizzling-Code aus ShareKit (in SHK.m).

+0

Ich realisiere das. Ich möchte MFMailComposeViewController nicht manuell umschreiben müssen - ich würde es bevorzugen, einen Weg zu finden, um das gesamte System zu teilen. – Luke

1

Ich habe noch nie auf dem neuesten XCode und iOS SDK ähnliche Methoden Swizzling verwandte Fehler erlebt. Ich benutze ShareKit 2.0. Obwohl Methoden Swizzling ist eine Sache, die meiner Meinung nach vermieden werden sollte.

Die Methode swizzled ist ViewDidDisappear wenn ich mich gut erinnere. Schau, was es macht. Auf iOS 5 können Sie dasselbe erreichen, indem Sie den Abschlussblock in - (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion verwenden.

Ändern Sie einfach die Art und Weise, wie Sie die ViewController in - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error kann ausreichen.

Dies ist nur eine Idee, wie Sie Methode Swizzle loswerden können.