我已经定义了一个变量,它给出了如下输出。
iPhone 4 >> 4
iPhone 5 >> 5
iPad >> 999
使用的功能如下。
#define iPhone4Or5 [[UIScreen mainScreen] bounds].size.height == 568 ? 5 :
([[UIScreen mainScreen] bounds].size.height == 480 ? 4 : 999)
当我使用NSLog变量iPhone4Or5
时,它为iPhone 5提供了正确的结果,但是当我进行比较时,它给出了错误的结果......
if (iPhone4Or5==999) {
NSLog("Its iPad version");
} else {
NSLog("Its iPhone version");
}
当我在iPhone 5或更高版本上面运行时,它总是给我NSLog作为它的iPad版本。
我知道为什么我会得到错误比较结果?
我在prefix.pch
注意:
如果我执行NSLog("iPhone4Or5==%d", iPhone4Or5)
,我的输出为iPhone4Or5==5
答案 0 :(得分:0)
您遇到运算符优先级问题 - 您的宏需要括号:
#define iPhone4Or5 ([[UIScreen mainScreen] bounds].size.height == 568 ? 5 : \
([[UIScreen mainScreen] bounds].size.height == 480 ? 4 : 999))
更好的是,避免这个和其他常见的宏相关问题并改为使用函数:
int iPhone4Or5(void)
{
const int height = [[UIScreen mainScreen] bounds].size.height;
if (height == 568) return 5;
if (height == 480) return 4;
return 999;
}
答案 1 :(得分:0)
记录[UIScreen mainScreen] bounds].size.height
的值并检查它是否为480。
或者你可以使用这些。
#define IS_IPAD ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] && [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
#define IS_IPHONE5 ((( !IS_IPAD && [[UIScreen mainScreen] bounds].size.height == 568))?YES:NO)