1

ヘッダーに定義された@interfacefor クラスと、ファイルに対応する実装があります。別のディレクトリにあるクラスの別の実装を Xcode プロジェクトに追加すると、「ユーティリティ」バーの「ファイル」タブで「ターゲット メンバーシップ」を指定して、実装を特定のターゲットに割り当てることができます。FooFoo.hFoo.mFoo.m

ただし、これはヘッダー ファイルでは機能しません。Foo.hクラスに別のヘッダーを追加するとFoo、「ユーティリティ」バーの「ファイル」タブで「メンバーシップ」を割り当てることができません。「クラス ' ' のインターフェイスが重複しています」というエラーが常に表示されFoo、宣言するプロパティごとに「プロパティには以前の宣言があります」といういくつかのエラーが表示されます。

Xcode 4.5.2 を使用して、異なるターゲットに対して同じ名前の異なるヘッダーで定義されたクラスを使用するにはどうすればよいですか?

更新:このスレッドで提案されている解決策を既に試しましたが、Xcode 4.5.2 では機能しません。エラー メッセージは上記のとおりです。

4

1 に答える 1

3

あなたのFooクラスは2つのターゲット間で部分的にしか異なるわけではないので、1つのFoo.hと1つのFoo.mがあることをお勧めします。次に、コンパイラ指令を使用して違いを処理します。

各ターゲットのビルド設定に移動し、[その他のCフラグ]の下にフラグを追加します。たとえば、ターゲットAの場合、次を追加できます。

-DTARGETA

ターゲットBの場合、次を追加できます。

-DTARGETB

次に、Foo.hで次のことができます。

@interface Foo : NSObject

@property commonProperty;
#if defined(TARGETA)
@property targetAProperty;
#elif defined(TARGETB)
@property targetBProperty;
#endif

@end

Foo.mに対して同様のことを行います。

于 2012-12-19T17:59:48.813 に答える