次のように、すべての定数 ( constant.h
)を配置するソース ファイルがあります。
#define MY_URL @"url"
#define SECOND_URL @"url2"
...
私の問題は、次のような条件で定数を宣言することです:
if (ipad)
#define MY_CONSTANT @"ipad"
else
#define MY_CONSTANT @"iphone"
どうすればこれを行うことができますconstant.h
か?
次のように、すべての定数 ( constant.h
)を配置するソース ファイルがあります。
#define MY_URL @"url"
#define SECOND_URL @"url2"
...
私の問題は、次のような条件で定数を宣言することです:
if (ipad)
#define MY_CONSTANT @"ipad"
else
#define MY_CONSTANT @"iphone"
どうすればこれを行うことができますconstant.h
か?
if you support both ipad and iphone, you won't know the device until runtime.
if you use a constants header, then you might approach the device specific definitions as follows:
constants.h
NSString * MON_CONSTANT();
constants.m
NSString * MON_CONSTANT() {
switch (UI_USER_INTERFACE_IDIOM()) {
case UIUserInterfaceIdiomPhone :
return @"iphone";
case UIUserInterfaceIdiomPad :
return @"ipad";
default :
return @"omg";
}
}
Notes:
#define
for your constants, use the extern NSString* const
approach instead.#define MY_CONSTANT ( ipad ? @"ipad" : @"iphone" )
また
#define MY_CONSTANT ( (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? @"ipad" : @"iphone" )
編集:上記は、決定がリアルタイムで行われるユニバーサルアプリに適しています。コンパイル時の決定が必要な場合は、通常、IPADまたはIPHONEのXcodeターゲットでPreProcessorマクロを使用します。UNIVERSAL(3つの方法を構築するため)も使用します。
#if defined(IPHONE)
#define MY_CONSTANT 4
#elif defined(IPAD)
#define MY_CONSTANT 6
#elif defined (UNIVERSALO)
#define MY_CONSTANT ( ipad ? 6 : 4 )
#endif
書くのも読むのも面倒だと思います。
(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
そこで、グローバルBOOL変数を作成し、(初期化で)appDelegateに値を設定し、「externBOOLiPad」を配置します。私のpchファイルのステートメント。初期化の場合:
ipad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? YES : NO;
私は知っています、グローバルは悪いなどです-そして、あなたがそれらを使いすぎるとそうです、しかしこのようなもののためにそれらは完璧です。