2009-05-27 14 views
1

Mac OS X 10.4と10.5の両方を対象とするプロジェクトがあります.10.5は基本SDKです。10.5ベースSDK、10.4デプロイメント:欠落したメソッドの実装方法

-[NSString stringByReplacingOccurrencesOfString:withString]のようないくつかのメソッドは、10.4では使用できません。私は手作業で機能を実装することができます。もう1つの選択肢は、メソッドをカテゴリとして実装することですが、それは10.5実装を混乱させるでしょう。それは避けたいものです。

10.4でこのようなメソッドを実装するにはどうしたらいいですか?10.5をサポートしなくても簡単に実装を取り出せるようにするにはどうすればいいですか?

+0

なぜ10.4 SDKの使用を検討していませんか? – mouviciel

+0

私はいくつかの10.5の機能を使用しています。 –

答えて

2

+load and +initializeload a method at runtimeの方法がまだない場合は、使用する必要があると思います。

+0

私はNSStringのような私が所有していないクラスのためにそれを置くのに最適な場所は何ですか? –

+0

+ loadこのメソッドは特殊で、カテゴリに実装されている場合に呼び出されます。つまり、1つ以上のloadメソッドを持つことができます。 –

+0

その場合、これは答えです、ありがとう:) –

0

10.4用にビルドされている場合、Cプリプロセッサマクロを使用して関連するメソッドを挿入する方法はありますか?たぶんカテゴリの中でこういうことをしようとすると、10.4に存在しないメソッドは10.4用に構築されている場合にのみ含まれますか?

#if defined(MAC_OS_X_VERSION_10_4) && MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4 
// Put your implementations of the methods here 
#endif 
+0

私は基本SDKとして10.5、デプロイメントターゲットとして10.4のビルドを行っています。したがって、常に10.5 SDKで構築されていますが、10.4で動作します(Tiger上では実際に新しいAPIを呼び出さない限り)。 –

+0

私はそれがMac OS Xの古いバージョンの10.4 SDKに対してビルドするべきだと思います。 –

+0

いいえ、選択可能な10.5機能があれば使用したいと思います。 –

0

10.4をサポートする必要がありますか? 10.5のみのメソッドをアプリケーションのコア部分に使用している場合は、10.5に進むことを検討する必要があります。上記の具体例を挙げて、私は離れているから移動すると、あなたが10.4

2
if ([myString respondsToSelector: @selector(stringByReplacingOccurrencesOfString:withString:)]) 
{ 
    // 10.5 implementation 
} 
else 
{ 
    // 10.4 implementation 
} 
2

使用Aで作業を行うNSMutableStringに類似の方法を使用することができますので、あなたの文字列の変更可能なコピーを作成することをお勧めとにかく

、カテゴリに追加しますが、メソッド名にタグを付けます。たとえば、stringByReplacingOccurrencesOfString_TigerCompatible:です。実装では、Leopardの実装か独自の実装を呼び出します。

Leopard専用の場合は、プロジェクトの検索で「TigerCompatible」を実行し、それらの方法をすべて焼き付けて、すべてのコールサイトのタグを解除します。

1

すべての不足している実装を、Tigerで実行している場合はmain()の起動時にロードされるバンドルのカテゴリに入れてください。

+0

これはかなりシンプルですっきりしたアイデアです。私は実際にそれに行くかもしれない。 –

関連する問題