たとえば、私のアプリ、有料版、無料版の複数のビルドを持っていて、どのビルドに応じて異なるインターフェイスを使用したいのですが、インターフェイスを混乱させるようですビルダー。私はIBでMyViewController.xibをロードコンパイル時に別のインターフェイス宣言を混乱させることなく使用する方法Interface Builder
// MyViewController.h
#ifdef FREE
@interface MyViewController : NSObject <UIActionSheetDelegate, ADBannerViewDelegate>
#else
@interface MyViewController : NSObject <UIActionSheetDelegate>
#endif
{
IBOutlet UILabel* myLabel;
}
- (IBAction) myAction:(id)sender;
が、それはファイルの所有者」の 『mylabelという』アウトレット 『がマイビュー』に接続されている」などの情報ウインドウで警告を示しています。たとえば
'myLabel'はMyViewControllerで定義されていません。 "
IBを混乱させないようにこれを行う方法はありますか?
私は他のオプションが#ifdefではなく、すべてのビルドに対して1つの定義しか持たないと仮定します。 ADBannerViewDelegate(iOS 4が必要)に準拠したコントローラでビルドし、iOS 3.2にデプロイするとどうなりますか?それがうまくいけば、おそらく問題はありません...
+1にはもう少し作業が必要ですが、コード全体に#ifdefsを振りかざす必要はありません。私はなぜこれを解決するために継承を使用することが私に起こらなかったのか分かりません。非常にエレガントなソリューション、ありがとう! – zpasternack