我开始将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相似。我在非调试模式下触发了崩溃,然后使用管理器查看了设备日志,这是它提供的功能:
异常类型: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
经过更多的实验之后,我能够通过@objc
在我的Obj-C代码可以调用的所有swift方法(包括init方法)中使用swift文件中的标记来解决这些冲突。例如,更改override init(frame: CGRect)
为@objc override init(frame: CGRect)
。
顺便说一句:@objc
在Xcode 6.0中为什么不“不需要”标志(尽管这可能是最佳做法),我还是有些困惑,但是Xcode 6.1中突然有一个要求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句