2011-01-03 34 views
2

私はもともとiphoneアプリだったもののための追加のiPadターゲットを作成しました。iOS - 条件付きコンパイル(xcode)

Apple docs: 「ほぼすべてのケースで、アプリケーションインターフェイスのiPadバージョンを管理するために、特にそのインターフェイスがiPhoneインターフェイスと異なる場合は、新しいView Controllerクラスを定義することをお勧めします。条件付きコンパイルを使用して、異なるビューコントローラの作成を調整することができます。

ただし、条件付きコンパイルの例や詳細は記載されていません。誰かが例を挙げることはできますか?そして、私はこれをどこでやりますか?

EDIT: 私はiPadターゲットで次のCフラグを定義しようとしました:-D USE_IPAD、-DUSE_IPAD。 いずれかの方法では、このコードは常にログインなっIPHONEになり:

#ifdef USE_IPAD 

     NSLog(@"IPAD"); 

    #else 

     NSLog(@"IPHONE"); 

    #endif 

私は何をしないのですか?

答えて

2

別のアプローチは、ストレートフォワードif elseステートメントです。

+0

それは、ありがとう、働く。 – sol

2

Conditional compilationは、コンパイルの制御にコンパイラ指令(またはコンパイラフラグ)を使用する場所です。

#ifdef SOME_CONDITION 

//This will only be compiled if SOME_CONDITION is defined as a compiler flag 

#else 

//Otherwise, this code will compile. 

#endif 

プロジェクト設定でコンパイラ指令を定義できます。 ターゲットを右クリックし(複数のターゲットを作成します.1つはiPhone用、もう1つはiPad用)、get get info。その後、その他のCフラグにスクロールします。そこに(a)旗を追加することができます。

alt text

EDIT:

私はあなたがやった同じ間違いを犯したことが表示されます。いくつかのグーグル・グーグルでは、Apple documentation andthis blog postというビルド設定に新しいフィールドを追加する必要があるかもしれないというメッセージが表示されます。

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    // iPad code 
} else { 
    // iPhone or iPod Touch code 
} 

私はそれが簡単に維持し、より少ないラインノイズを見つけるように、私は条件付きコンパイル上にこれを好む:条件付きコンパイルすることが好ましいかもしれない

+0

どのターゲットをCフラグで定義しますか? iPhoneまたはiPadのターゲットですか? – sol

+0

さて、ターゲットごとに1つのターゲットを作成してから、iPhoneのターゲットにiPhoneを指定します。 iPadでは、iPadを指定します。あるいは、あなたが望むものの中でそれを指定し、 '#else'を他のものにすることができます。 – Moshe

+0

上記の元の質問の編集をご覧ください。 – sol