Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.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 UI\u USER\u INTERFACE\u IDIOM()使仅在设备上分发的应用程序崩溃_Ios_Swift_Crash - Fatal编程技术网

Ios UI\u USER\u INTERFACE\u IDIOM()使仅在设备上分发的应用程序崩溃

Ios UI\u USER\u INTERFACE\u IDIOM()使仅在设备上分发的应用程序崩溃,ios,swift,crash,Ios,Swift,Crash,我创建了一个基于单页swift语言的iOS应用程序示例,它在viewDidLoad()中调用func时崩溃- 但一旦我用苹果推荐的UIDevice()方法替换了这个UI\u用户界面\u习惯用法(),它就可以正常工作了 func regularFont() -> UIFont { var fontSize : CGFloat = (UIDevice().userInterfaceIdiom == .Pad) ? 15 : 12 return UIFont.systemFont

我创建了一个基于单页swift语言的iOS应用程序示例,它在viewDidLoad()中调用func时崩溃-

但一旦我用苹果推荐的UIDevice()方法替换了这个UI\u用户界面\u习惯用法(),它就可以正常工作了

func regularFont() -> UIFont {
    var fontSize : CGFloat = (UIDevice().userInterfaceIdiom == .Pad) ? 15 : 12
    return UIFont.systemFontOfSize(fontSize)
}
崩溃发生在我测试过的所有设备上——iPhone 5s、iPhone 6和iPad Air(都在iOS 8.x上),而且只发生在设备上,而不是模拟器上

PS:该应用程序通过我们的OTA/web链接安装在所有设备上

令我惊讶的是,我们在苹果的应用商店上有另一款基于c语言的应用程序,它大量使用UI_用户界面_惯用语(),定期更新。。。但从未因此而崩溃

有什么想法吗?

我明白了(部分!)。实际上,swift项目中的
UI\u USER\u INTERFACE\u IDIOM()
“发布”“实现”会使应用程序崩溃

一旦我将方案编辑为“发布”(Xcode>产品>方案>编辑方案>运行>构建配置更改为“发布”),然后在模拟器/设备上运行,应用程序就会到处崩溃。。所有设备/模拟器/开发人员/分发配置文件

然而,我仍然不知道为什么我们的应用商店应用程序(基于objective c语言)没有崩溃

我唯一的猜测是,这是苹果公司的
UI\u USER\u INTERFACE\u IDIOM()
API实现中的一个小故障,它使用了一些特定于语言的编码(swift vs objective c)

无论如何,我会用
UIDevice()替换所有
UI\u用户界面\u习惯用法()。userInterfaceIdiom
。我希望这对别人有帮助

我明白了(部分!)。实际上,swift项目中的
UI\u USER\u INTERFACE\u IDIOM()
“发布”“实现”会使应用程序崩溃

一旦我将方案编辑为“发布”(Xcode>产品>方案>编辑方案>运行>构建配置更改为“发布”),然后在模拟器/设备上运行,应用程序就会到处崩溃。。所有设备/模拟器/开发人员/分发配置文件

然而,我仍然不知道为什么我们的应用商店应用程序(基于objective c语言)没有崩溃

我唯一的猜测是,这是苹果公司的
UI\u USER\u INTERFACE\u IDIOM()
API实现中的一个小故障,它使用了一些特定于语言的编码(swift vs objective c)


无论如何,我会用
UIDevice()替换所有
UI\u用户界面\u习惯用法()。userInterfaceIdiom
。我希望这对别人有帮助

UI\u USER\u INTERFACE\u IDIOM()
只是一个Objective-C宏,定义如下:

#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)
因此,当您使用Swift时,您需要使用as:

UIDevice.currentDevice().userInterfaceIdiom == .Pad
UIDevice.currentDevice().userInterfaceIdiom == .Phone
UIDevice.currentDevice().userInterfaceIdiom == .Unspecified

希望这能有所帮助。

UI\u USER\u INTERFACE\u IDIOM()
只是一个Objective-C宏,定义如下:

#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)
因此,当您使用Swift时,您需要使用as:

UIDevice.currentDevice().userInterfaceIdiom == .Pad
UIDevice.currentDevice().userInterfaceIdiom == .Phone
UIDevice.currentDevice().userInterfaceIdiom == .Unspecified
希望这能有所帮助。

Swift 5.3及以上版本:

if UIDevice.current.userInterfaceIdiom != .pad {
  // do stuff
}
Swift 5.3及以上版本:

if UIDevice.current.userInterfaceIdiom != .pad {
  // do stuff
}

同意,我们应该使用UIDevice var/property。但是,对你的答案做一点技术上的更正-它不是一个宏,而是UIDevice.h中定义的“静态内联”函数,并且在类的swift版本中有func声明。我欠你我的理智:今天我第一次在发行版中编译,而不是调试,我的应用程序崩溃得太厉害了。。。当我在网上寻找答案时,我发现。在Xcode 7 beta 2中修复的事实对我没有帮助,因为我想在下个月发布。。。所以,我知道评论不是为了感谢,但你救了我一天!啊,不客气,兄弟。你让我今天有了一个好的开始。同意,我们应该使用UIDevice var/property。但是,对你的答案做一点技术上的更正-它不是一个宏,而是UIDevice.h中定义的“静态内联”函数,并且在类的swift版本中有func声明。我欠你我的理智:今天我第一次在发行版中编译,而不是调试,我的应用程序崩溃得太厉害了。。。当我在网上寻找答案时,我发现。在Xcode 7 beta 2中修复的事实对我没有帮助,因为我想在下个月发布。。。所以,我知道评论不是为了感谢,但你救了我一天!啊,不客气,兄弟。你让我今天有了一个好的开始。