我开始将Swift代码集成到我的Obj-C项目中。一切都进展顺利,但今天,当我更新到Xcode 6.1时,事情发生了变化。我从Swift代码中获得了一些以前运行正常的“陷阱”异常。
第一次崩溃是我对UIFont的扩展。这是我的代码:
class func specialFont() -> UIFont {
let font = UIFont(name: "FontName", size: 12.0)
return font!
}
此代码在更新到Xcode 6.1之前工作正常,但现在在EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT)
与dylddyld_fatal_error: 0x1fe1608c: trap
崩溃。 (顺便说一句,我没有设置异常断点。)尝试继续执行程序不会生成崩溃日志,它只是进入生成该异常的无限循环。同样,在Xcode 6.1更新之前,代码工作正常。
第二次崩溃特别奇怪,因为只有在设备上调试时才会发生,而不是在模拟器上调试。与上面相同的异常信息。这是崩溃的第二部分代码:
let tap = UITapGestureRecognizer(target: self, action: "didTap")
self.addGestureRecognizer(tap)
感谢您的帮助!
更新
堆栈跟踪如下:
0] dyld_fatal_error
1] dyld_stub_binder
4] Project.FileWhereCrashTriggers.methodTriggeringCrash
5] @objc Project.FileWhereCrashTriggers.methodTriggeringCrash
6] -- continued trace up to call of method crashing
这些崩溃的一个奇怪之处在于它们不会在实际的代码行上触发异常,正如您可以从堆栈跟踪中看到的那样。他们在dyld_fatal_error中打破。
我无法上传任何控制台输出,因为在Xcode中运行时应用程序从未真正崩溃 - 它无休止地调用类似于EXC_BAD_ACCESS。我在非调试模式下触发了崩溃,然后使用Organizer查看了设备日志,这就是它提供的内容:
异常类型:EXC_BREAKPOINT(SIGTRAP) 例外代码:0x0000000000000001,0x00000000e7ffdefe 由线程触发:0
Dyld错误消息: 未找到符号:__TFSSCfMSSFT21_builtinStringLiteralBp8byteSizeBw7isASCIIBi1__SS 参考自:/private/var/mobile/Containers/Bundle/Application/4ABA71F8-A6D1-4E4B-A452-DE339065310A/Project.app/Project
预计:/private/var/mobile/Containers/Bundle/Application/4ABA71F8-A6D1-4E4B-A452-DE339065310A/Project.app/Frameworks/libswiftCore.dylib Dyld版本:353.5
答案 0 :(得分:2)
干净的版本为我解决了(从XCode清除并删除设备上的应用程序)
答案 1 :(得分:0)
经过多次实验,我能够通过我的swift文件中的@objc
标记来解决这些冲突,这些标记可以通过我的Obj-C代码调用,包括init方法。例如,将override init(frame: CGRect)
更改为@objc override init(frame: CGRect)
。
顺便说一下:我仍然对为什么@objc
标志在Xcode 6.0中不是'必需'(虽然它可能是最佳实践)仍然有点困惑,但突然在Xcode 6.1中是一个要求。