#ifdef条件不按我想要的方式工作

时间:2013-01-28 07:41:56

标签: iphone ios objective-c ipad ios-universal-app

我正在以编程方式创建UniversalApp。在我的应用程序中,我有2个常数类,并且在设备的基础上我想导入我的常量类。但它始终打开" Constants_iPad"类。即使条件是真是假。

#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

当我使用

打印在consol上时
 #ifdef iPad
     NSLog(@"iPad = %d",iPad);
 #endif
然后它打印" 0"如果条件错误且条件为真则打印1

3 个答案:

答案 0 :(得分:1)

这里的逻辑存在一些问题,但最大的问题是,在程序实际在设备上运行之前,您无法确定用户是在iPad还是iPhone上运行程序(长!)

虽然这实际上并没有帮助你完成你想要做的事情,但它始终导入你的Constants_iPad.h的原因是因为在顶部,你定义了一个名为iPad的宏,然后在下面你说“如果iPad已定义,然后导入此文件“。嗯,总是定义。你刚刚在第二行做到了。

要完成您要执行的操作,您需要包含这两个文件(确保您的定义是唯一的)。

然后,在您的实现文件中使用类似:

的内容
if (iPad) {
    // Use the iPad definitions to do what you want
} else {
    // Use the iPhone definitions
}

答案 1 :(得分:1)

你试过#ifdef TARGET_IPHONE或#ifdef TARGET_IPAD而不是#ifndef iPhone吗?我不确定宏#ifndef iPhone?但除此之外,我认为在导入类的预编译时间内无法确定目标。

答案 2 :(得分:0)

编辑:您必须使用#if代替#ifdef。正如this所说,这是一个常见的错误。

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

和其他宏here