1

Mac OS X 10.4と10.5の両方を対象とするプロジェクトがあります。ここで、10.5はベースSDKです。

のようないくつかの方法-[NSString stringByReplacingOccurrencesOfString:withString]は10.4では利用できません。手作業で機能を実装することができました。別のオプションは、メソッドをカテゴリとして実装することですが、それは10.5の実装を台無しにするので、それは避けたいものです。

では、10.5を台無しにすることなく、10.4のサポートを停止することにしたときに実装を簡単に実行できるように、10.4でそのようなメソッドを実装するにはどうすればよいですか?

4

6 に答える 6

2

メソッドがまだ存在しない場合は、実行時にメソッドを使用+load+initializeロードする必要があると思います。

于 2009-05-27T08:15:41.347 に答える
2
if ([myString respondsToSelector: @selector(stringByReplacingOccurrencesOfString:withString:)])
{
  // 10.5 implementation
}
else
{
  // 10.4 implementation
}
于 2009-05-27T12:02:54.837 に答える
2

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

Leopardのみを使用する場合は、「TigerCompatible」のプロジェクト検索を実行してから、これらのメソッドをすべて実行し、すべての呼び出しサイトのタグを解除します。

于 2009-05-27T18:16:45.830 に答える
1

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

于 2009-05-28T16:00:50.910 に答える
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
于 2009-05-27T08:36:12.117 に答える
0

10.4をサポートする必要がありますか?アプリのコア部分で10.5のみのメソッドを使用している場合は、10.5のみを使用することを検討する時期かもしれません。

とにかく、上記の特定の例では、それから離れて文字列の可変コピーを作成し、10.4で機能するNSMutableStringで同様のメソッドを使用できるようにすることをお勧めします。

于 2009-05-27T10:41:16.467 に答える