1

プログラムで UniversalApp を作成しています。私のアプリには2つの定数クラスがあり、デバイスに基づいて定数クラスをインポートしたいと考えています。ただし、常に「Constants_iPad」クラスを開きます。偶数条件は true または false です。

#ifndef iPad
    #define iPad    (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#endif
#ifndef iPhone
    #define iPhone  (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad)
#endif


#ifdef iPad  ------> always excute this condition either True of False.
    #import "Constants_iPad.h" // if device is iPad
#else
    #import "Constants_iPhone.h" // if device is iPhone
#endif

を使用してコンソールに印刷すると

 #ifdef iPad
     NSLog(@"iPad = %d",iPad);
 #endif

条件が間違っている場合は「0」を出力し、条件が真の場合は1を出力します

4

3 に答える 3

1

#ifndef iPhone の代わりに #ifdef TARGET_IPHONE または #ifdef TARGET_IPAD を試しましたか? マクロ #ifndef iPhone についてよくわかりません。しかし、それとは別に、クラスをインポートするためのプリコンパイル時にターゲットを決定することは可能だとは思いません。

于 2013-01-28T07:46:28.583 に答える
1

ここでのロジックにはいくつかの問題がありますが、最大の問題は、プログラムが実際にデバイスで実行されるまで (コンパイルされてからずっと後になるまで)、ユーザーが iPad または iPhone でプログラムを実行しているかどうかを判断できないことです。 )!

これは実際にあなたがやろうとしていることを達成するのに役立ちませんが、常に Constants_iPad.h をインポートしている理由は、上部で iPad というマクロを定義し、その下で「iPad が定義されている場合、次に、このファイルをインポートします。」まあ、それは常に定義されています。あなたはちょうど2行目でそれをしました。

目的を達成するには、両方のファイルを含める必要があります (定義が一意であることを確認してください)。

次に、実装ファイルで次のようなものを使用します。

if (iPad) {
    // Use the iPad definitions to do what you want
} else {
    // Use the iPhone definitions
}
于 2013-01-28T07:45:45.897 に答える
0

編集#if:の代わりに使用する必要があります#ifdef。これ言ったように、それはよくある間違いです。

#if TARGET_OS_IPAD
    #import "Constants_iPad.h" // if device is iPad
#else
    #import "Constants_iPhone.h" // if device is iPhone
#endif

その他のマクロスはこちら.

于 2013-01-29T17:00:10.043 に答える