【发布时间】: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)。