Ita*_*chi 0 iphone objective-c ipad ios
我正在构建一个通用的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;
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果用户在iPad中安装并运行iPhone版本应用程序,则fCurrentDeviceIsiPad将为YES(我在我的iPad版iPhone版本中测试了结果,当然,我首先将部署设备更改为"iPhone").
所以,我的问题是如何在不考虑设备类型的情况下区分应用模式?
有人发布了有关操作系统宏的内容,我已经在我的应用程序中尝试过了.
#if TARGET_OS_IPHONE
// iPhone specific code
#error A
#elif TARGET_OS_IPAD
// iPad specific code
#error B
#else
// Unknown target
#error C
#endif
Run Code Online (Sandbox Code Playgroud)
这也没有达到我的观点.我将调试设备切换到iPhone模拟器和iPad模拟器,所有编译错误都出现在错误A上.我是否误解了这些宏的含义?
还有一个问题,这将是我第一次将iOS提交到AppStore,它是一款通用应用.对于提交过程,是上传iPhone版二进制文件和iPad版二进制文件的独立过程吗?您可能会得到我的新观点:如果答案是肯定的,我可以使用自定义宏手动构建两个版本.
谢谢!
更新:问题解决了!
代码[UIDevice currentDevice].model与之前的代码不一样UI_USER_INTERFACE_IDIOM(),前者总是返回真实的设备类型,后者是当前运行的应用程序模式/版本.
BOOL isIpad() {
return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |