【问题标题】:EXC_BAD_ACCESS at runtime when accessing swift array运行时访问 swift 数组时的 EXC_BAD_ACCESS
【发布时间】:2014-07-15 20:20:41
【问题描述】:

我对 swift 数组的行为感到很困惑。在以下示例中,当我尝试将新元素添加到数组 inboxDocuments 时,我在运行时收到 EXC_BAD_ACCESS 错误。

import Cocoa

class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet var window: NSWindow

    var inboxDocuments:[ArchiveDocumentFile] = []

    func applicationDidFinishLaunching(aNotification: NSNotification?) {
        var docFile = ArchiveDocumentFile(newFile: "")
        inboxDocuments.append(docFile)
    }

    func applicationWillTerminate(aNotification: NSNotification?) {
        // Insert code here to tear down your application
    }
}

令人惊讶的是,当我将 Array 的类型更改为 String 数组时

var inboxDocuments:[String] = []

然后尝试添加一个字符串,一切正常。

inboxDocuments.append("docFile")

我做错了什么,所以我的自定义类类型数组不起作用?

我目前正在使用 XCode Beta 3

编辑 1:

这是调试器抱怨的截图。

编辑 2:

经过进一步调查,问题似乎是我绑定到该数组的 NSArrayController。我用它来向 NSCollectionView 提供数据。

我可以将 arrayController 绑定到数组。工作正常。

我可以将集合视图绑定到控制器。工作正常。 (未填充值)条目出现在正确的计数中。

但是当我将我的对象的值绑定到视图标签时,我在运行时遇到上述错误......奇怪。

编辑 3:

我解决了这个问题... ArchiveDocumentFile 中的绑定值是一个常量(用 let 声明)。当我将其更改为 var 时,它运行良好。问题可能是,因为常量不符合 KVC。但是为什么会导致这样的错误呢?

【问题讨论】:

  • 你确定不是这个导致错误var docFile = ArchiveDocumentFile(newFile: "")
  • 是的,在调试器中我可以看到正确的 docFile 实例,并且它正确地填充了预期值。添加了调试器的截图。
  • stackoverflow.com/questions/24691563/… 的可能重复项尝试对项目进行清理。
  • 我做了一个清洁,但这并没有改变这种情况。我解决了我的问题(见编辑 3)。

标签: macos cocoa swift xcode6


【解决方案1】:

我解决了这个问题... ArchiveDocumentFile 中的绑定值是一个常量(用 let 声明)。当我将其更改为 var 时,它运行良好。问题可能是,因为常量不符合 KVC。但是为什么会导致这样的错误呢?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多