Ios UI\u USER\u INTERFACE\u IDIOM()使仅在设备上分发的应用程序崩溃
我创建了一个基于单页swift语言的iOS应用程序示例,它在viewDidLoad()中调用func时崩溃- 但一旦我用苹果推荐的UIDevice()方法替换了这个UI\u用户界面\u习惯用法(),它就可以正常工作了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
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中修复的事实对我没有帮助,因为我想在下个月发布。。。所以,我知道评论不是为了感谢,但你救了我一天!啊,不客气,兄弟。你让我今天有了一个好的开始。