我在viewDidLoad()中创建了一个基于swift语言的示例单页基于swift语言的应用程序CRASHES -
func regularFont() -> UIFont {
var fontSize : CGFloat = (UI_USER_INTERFACE_IDIOM() == .Pad) ? 15 : 12
return UIFont.systemFontOfSize(fontSize)
}
但是一旦我用Apple推荐的UIDevice()方法替换了这个UI_USER_INTERFACE_IDIOM(),它就可以了。
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链接安装在所有设备上。
令我惊讶的是,我们在Apple的App Store上有另一个基于c语言的客观应用程序,该应用程序大量使用UI_USER_INTERFACE_IDIOM(),定期更新......但由于此原因从未崩溃。
有什么想法吗?
答案 0 :(得分:5)
[u'\u4f60\u597d']
只是一个Objective-C宏,定义为:
UI_USER_INTERFACE_IDIOM()
因此,当您使用Swift时,您需要使用as:
#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)
希望这可以提供帮助。
答案 1 :(得分:0)
我得到了它(部分!)。实际上 swift 项目中UI_USER_INTERFACE_IDIOM()
的“发布”实施会导致该应用崩溃。
一旦我编辑方案为“发布”(Xcode>产品>方案>编辑方案>运行>构建配置更改为“发布”)然后在模拟器上运行/设备,应用程序崩溃到处..所有设备/模拟器/开发人员/分发配置文件。
然而,我仍然不知道为什么我们的应用程序商店应用程序(基于客观c语言)不会崩溃。
我唯一的猜测是,UI_USER_INTERFACE_IDIOM()
API实现中出现了一个小故障,其中包含Apple的一些特定于语言的编码(swift vs objective c)。
无论如何,我会用UI_USER_INTERFACE_IDIOM()
替换所有UIDevice(). userInterfaceIdiom
。我希望这有助于某人!
答案 2 :(得分:0)
Swift 5.3 及更高版本:
if UIDevice.current.userInterfaceIdiom != .pad {
// do stuff
}