1

iPhone OS 2.0 用に設計されたアプリケーションがあり、新しい 3.x 機能をいくつか追加しています。私の考えは、古いバージョンとの互換性を維持することです。

これまでのところ、「if RespondToSelector ...」を使用して非推奨の機能をテストすることができました。これはメソッド内の呼び出しには問題ありませんが、メソッド名の変更をどのように処理するのでしょうか? たとえば、OS 2.x の方法

-imagePickerController:didFinishPickingImage:editingInfo:

OS 3.x で変更されました

-imagePickerController:didFinishPickingMediaWithInfo:

この場合、OS のバージョンをテストし、アプリケーションを適切な方法に誘導するにはどうすればよいですか?

助けてくれてありがとう。

4

2 に答える 2

3

NSObjectの-respondsToSelectorメソッドを使用して、メソッドが存在するかどうかを動的に判別してから呼び出すことができます。メソッドの呼び出しに使用することも-performSelector:withObject:できるので、コンパイラの警告は表示されません。

于 2010-03-07T19:45:10.537 に答える
0

わかった。

もう一度読んだ後、私はあなたの問題を完全には理解していないことがわかりました. 両方のメソッドを実装すると、どちらか一方が実行時に実行されます。2.x の場合は -imagePickerController:didFinishPickingImage:editingInfo: が実行され、3.x の場合はもう一方が呼び出されます

これは私が時期尚早に書いたがらくたであり、コメントが関連している場所です:

あなたが使用することができます

#ifdef __IPHONE_3_0
// iPhone 3.0 specific stuff
#else
// iPhone 2.2 specific stuff
#endif

この投稿も参照してください。

iPhone 用にコンパイルするときに Xcode によって設定される #defines とは

于 2010-03-07T19:42:57.340 に答える