我正在建立一个通用的iOS应用程序,一些配置变量在iPhone模式和iPad模式之间具有不同的价值。请注意我说的是模式字。
据我所知,用户可以从AppStore在iPad上安装iPhone应用程序,所以我对以下代码感到困惑:
NSString *deviceType = [UIDevice currentDevice].model;
if([deviceType rangeOfString:@"iPad" options:NSCaseInsensitiveSearch].location != NSNotFound)
{
fCurrentDeviceIsiPad = YES;
// ...
}
else // iPhone? iPod?
{
fCurrentDeviceIsiPad = NO;
// ...
}
如果用户安装&在iPad上运行iPhone版本的应用程序,fCurrentDeviceIsiPad将是YES(我测试了结果,在我的iPad上为iPhone版调试它,当然,我已经将部署设备改为" iPhone"只有第一个)。
所以,我的问题是如何在不考虑设备类型的情况下区分应用模式?
Someone发布了有关操作系统宏的内容,我已在我的应用中尝试过这些内容。
#if TARGET_OS_IPHONE
// iPhone specific code
#error A
#elif TARGET_OS_IPAD
// iPad specific code
#error B
#else
// Unknown target
#error C
#endif
这也没有达到我的观点。我将调试设备切换到iPhone模拟器和iPad模拟器,所有编译错误都出现在错误A上。我是否误解了这些宏的含义?
还有一个问题,这是我第一次将iOS提交到AppStore并且它是一款通用应用。对于提交过程,是上传iPhone版二进制文件和iPad版二进制文件的独立过程吗?您可能会得到我的新观点:如果答案是肯定的,我可以使用自定义宏手动构建两个版本。
谢谢!
更新:问题解决了!
代码[UIDevice currentDevice].model
与UI_USER_INTERFACE_IDIOM()
不同,前者总是返回真实设备类型,后者是当前正在运行的应用模式/版本。
答案 0 :(得分:5)
BOOL isIpad() {
return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
}
答案 1 :(得分:1)
创建一个NSObject文件并将其命名为Common。删除.m并删除所有用Common.h编写的代码 在.pch文件中导入Common.h文件 把它放在Common.h文件中 然后你可以在整个应用程序中使用它。
#define IS_IPHONE (!IS_IPAD)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
感谢。