1

私のコードには、iOS 5以降でのみ使用可能なクラスであるUIReferenceLibraryViewController(UIKit Frameworkの一部)を継承するクラス(myRefLibと呼びます)が含まれています。iOS3.2の展開ターゲットが欲しいのですが。

UIReferenceLibraryViewControllerのインスタンスを作成したばかりの場合は、5のベースSDKを使用して、それを含むコードを実行する前に、[UIReferenceLibraryViewControllerクラス]でクラスが存在するかどうかをテストできることを理解しています。しかし、クラスから継承している場合はどうすればよいですか?

問題は、それを使用するコードの部分に継承クラスmyRefLibを#includeする必要があることですが、実行時に条件付きでそれを行う方法はありません。あるいは、myRefLibのUIReferenceLibraryViewControllerから条件付きで継承するランタイムの方法もありません。また、myRefLibのインスタンスを別のクラスのプロパティにしたいのですが、このランタイムを条件付きで実行するにはどうすればよいですか?

どんな助けでも大歓迎です...

D

4

1 に答える 1

1

さて、まず第一に、あなたは以前のOSで実行しているときに何をしようとしているのかを知っています。基本的に、iOS3.2SDKに対してビルドしているかのようにコードを記述する必要があります。そうして初めて、新しい機能を使用してオプションの拡張機能を追加できます。

最も簡単なことから始めます。インスタンス変数を含む変数をそのクラスへのポインターとして宣言するために、クラスインターフェイスの宣言は必要ありません。前方宣言が必要です。

@class SomeClass;
SomeClass* foo;

次に、クラスを定義するヘッダーのインポートに問題はないはずです。これはコンパイル時の問題であり、問​​題だと思われるかもしれませんが、ランタイム環境の影響を受けないことを意味します。iOS 5.0 SDKに対してビルドしているため、コンパイルされます。

注意しなければならないのは、クラスが利用できない場合はクラスを使用しないことです。あなたはすでにそれをチェックする方法を知っています:[SomeClass class]が戻るかどうかをテストしてくださいNil。含まれている場合は、カスタムサブクラスをインスタンス化しないでください。

最後に、「myRefLibのUIReferenceLibraryViewControllerから条件付きで継承するランタイム」について説明します。なぜあなたはそれをする必要があると思いますか?が利用できない場合は、それをサブクラス化するものUIReferenceLibraryViewControllerを使用することはあまり意味がありません。myRefLibに依存しない代替実装を念頭に置いている場合はUIReferenceLibraryViewController、別のクラスを作成してください。次にmyRefLib、可用性に応じて、この他のクラスとの間を条件付きで選択します。

于 2012-05-12T04:27:18.997 に答える