Obj-C / Swift项目中的致命陷阱异常

时间:2014-10-22 01:11:55

标签: ios objective-c xcode swift

我开始将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

2 个答案:

答案 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中是一个要求。