我的OSX程序与EXC_BAD_ADDRESS崩溃,代码为EXEC_I386_GPFLT。
我没有任何常见的消息,比如找不到选择器......
该程序之前正在运行,我刚刚更改了调用系统。这是一个自制的热键管理器,我现在使用MASShorcut。
我怀疑是一个线程问题,我想我会用dispatch_xx块解决问题。
所以实际的问题是:EXEC_I386_GPFLT是什么意思?
func saveFile() {
// crashes on following line
let savePanel = NSSavePanel(contentRect: NSRect(), styleMask: NSTitledWindowMask, backing: NSBackingStoreType.Buffered, `defer`: true)
savePanel.canCreateDirectories = true
...
答案 0 :(得分:1)
EXEC_I386_GPFLT
是一般保护错误。
这通常意味着你的应用程序尝试取消引用一个地址,这个地址不仅仅是某些不可读的内存部分,而且非常荒谬,并且引用了一些根本不能用于内存的东西(在64位系统上,实际上没有例如,64位可寻址空间,因为某些位在某些上下文中用作元数据。)
鉴于崩溃和调用都在主线程上,它看起来不像是一个线程问题(至少,没有给出证据)。
通常,您使用NSSavePanel()
创建一个保存面板。鉴于它在alloc / init中崩溃,我建议采用标准方法创建一个。