2

最近、iOS 5 SDKを使用してLionとXcode 4.3.1にアップグレードしました。共有ライブラリShareKitは壊れています。電子メールハンドラのためにメソッドswizzlingを使用しました。明らかにアップルはbannedを持っているか、少なくともメソッドswizzlingを廃止しようとしました。Lion/Xcode 4.3.1でShareKitメソッドがうごめく?

ShareKitはファイル</usr/include/objc/objc-class.h>をインポートします。これはもはや存在せず、独自のメソッドスウィズリングメソッドSHKSwizzleを定義しています。これは次のようにMFMailComposeViewControllerviewDidDisappear:方法を変更するためにこれを使用しています。

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

あなたがこの問題を回避するための最良かつ最も簡単な方法は何だと思いますか?

+2

'/ usr/include/objc/objc-class.h'をインクルードするのではなく、' objc/objc-class.h'をインクルードしてください。 –

+0

どちらも存在しません... – Luke

答えて

0

スウィズルは電子メールの共有にのみ使用されています。自分でMFMailComposeViewControllerを使い、ShareKitからswizzlingコードを削除します(SHK.mにあります)。

+0

これを実現します。私は手動でMFMailComposeViewControllerを再ラップする必要はありません - 私は共有システム全体を流線型に保つことができるようにこれを回避する方法を見つけることを好むでしょう。 – Luke

1

私は、最新のXCodeとiOS SDKであっても、方法の面倒なエラーを経験したことがありません。私はShareKit 2.0を使用します。私の考えでは、方法の混乱は避けなければならないことですが。

私がうまく覚えていれば、スウィズルされたメソッドはviewDidDisappearです。それが何を参照してください。 iOS 5では、- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completionの完了ブロックを使用して同じことを達成できます。

ちょうどあなたが- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)errorでviewControllerを却下する方法を変更するだけで十分かもしれません。

これは単なるアイデアです。どのようにしてメソッドswizzleを取り除くことができますか。

関連する問題