Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:如何区分iPhone模式和iPad模式?_Ios_Iphone_Objective C_Ipad - Fatal编程技术网

iOS:如何区分iPhone模式和iPad模式?

iOS:如何区分iPhone模式和iPad模式?,ios,iphone,objective-c,ipad,Ios,Iphone,Objective C,Ipad,我正在构建一个通用iOS应用程序,一些配置变量在iPhone模式和iPad模式之间具有不同的值。请注意,我说的是模式单词 据我所知,用户可以从AppStore在iPad上安装iPhone应用程序,因此我对以下代码感到困惑: NSString *deviceType = [UIDevice currentDevice].model; if([deviceType rangeOfString:@"iPad" options:NSCaseInsensitiveSearch].location !=

我正在构建一个通用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版本的应用程序,fcurrentdevicesipad将是肯定的(我在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
这也没有达到我的目的。我将调试设备切换到iPhone simulator和iPad simulator,所有编译错误都是在错误A上出现的。我是否误解了这些宏的含义

还有一个问题,这将是我第一次向AppStore提交iOS,它是一个通用应用程序。对于提交过程,是否是上传iPhone版本二进制文件和iPad版本二进制文件的独立过程?你可能会得到我的新观点:如果答案是肯定的,我可以用我的自定义宏手动构建两个版本

谢谢

更新:问题已解决


代码
[UIDevice currentDevice].model
UI\u USER\u INTERFACE\u IDIOM()
不同,前者总是返回真实的设备类型,后者是当前运行的应用程序模式/版本。

创建一个NSObject文件并将其命名为Common。删除.m并删除所有用Common.h编写的代码
BOOL isIpad() {
    return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
}
在.pch文件中导入公共.h文件 这是公共的.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 )
\define IS\u IPHONE(!IS\u IPAD)
#定义为IPAD(用户界面习惯用法()!=UIUserInterfaceIdiomPhone)
#定义为IPHONE 5(晶圆((双)[[UIScreen mainScreen]边界].size.height-(双)568)

谢谢。

创建一个NSObject文件并将其命名为Common。删除.m并删除所有用Common.h编写的代码 在.pch文件中导入公共.h文件 这是公共的.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 )
\define IS\u IPHONE(!IS\u IPAD)
#定义为IPAD(用户界面习惯用法()!=UIUserInterfaceIdiomPhone)
#定义为IPHONE 5(晶圆((双)[[UIScreen mainScreen]边界].size.height-(双)568)

谢谢。

宏在编译时进行计算。除非你在Xcode中为ipad和iphone设置了两个单独的目标,否则它不会工作。除非你在Xcode for ipad和iphone中有两个单独的目标,否则它不会工作。似乎我发布了一个重复的问题,我以前发现过这段代码,但我认为这个函数与比较设备的型号值几乎相同,就像上面的代码一样。不管怎么说,我已经尝试过这个方法,它是有效的:当我在iPad上运行iPhone版本的应用程序时,返回值是NO。谢谢似乎我发布了一个重复的问题,我以前发现过这个代码,但我认为这个函数与比较设备的型号值几乎相同,就像上面的代码一样。不管怎么说,我已经尝试过这个方法,它是有效的:当我在iPad上运行iPhone版本的应用程序时,返回值是NO。谢谢