访问swift数组时运行时的EXC_BAD_ACCESS

时间:2014-07-15 20:20:41

标签: macos cocoa swift xcode6

我很安静地对快速数组的行为感到困惑。在下面的示例中,当我尝试向数组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] = []

然后尝试添加一个String,一切正常。

inboxDocuments.append("docFile")

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

我目前正在使用XCode Beta 3

编辑1:

这是调试器抱怨的一个screeshot。

Error in debugger

编辑2:

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

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

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

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

编辑3:

我解决了这个问题...... ArchiveDocumentFile中的绑定值是一个常量(用let声明)。当我把它改成var时,它工作得很安静。问题可能是因为常量不符合KVC。但是为什么会导致这样的错误?

1 个答案:

答案 0 :(得分:1)

我解决了问题... ArchiveDocumentFile中的绑定值是一个常量(用let声明)。当我把它改成var时,它工作得很安静。问题可能是因为常量不符合KVC。但是为什么会导致这样的错误?