1

我正在以编程方式创建 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

4

3 回答 3

1

您的逻辑在这里有几个问题,但最大的问题是您无法确定用户是在 iPad 还是 iPhone 上运行程序,直到程序实际在设备上运行(在编译很久之后)!

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

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

然后,在您的实现文件中,您使用以下内容:

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

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

于 2013-01-28T07:46:28.583 回答
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 回答