构建环境:Xcode 7 beta 7 OS X:10.10.5 Swift 2
我有一个项目使用来自 github 的 BSManagedDocument 类将核心数据包装到 NSDocument 中。我正在使用 Cocoa 绑定将数据从核心数据获取到使用 NSTree 控制器的 NSOutlineView。
对象模型相当简单。绑定到树控制器的对象(称为 SourceGroup_)与其自身具有一对多关系,为树控制器提供分层数据。它还与提供 URL 的 Media 对象具有可选的一对一关系相关媒体(图像、视频等)。
大纲视图绑定了三列,两列绑定到主对象的属性,而第三列是来自一对一媒体关系的缩略图。
一切都显示得很好,但是当我关闭文档时,我在 _NSGetUsingKeyValueGetter 中得到了一个 EXC_BAD_ACCESS,它通过 NSAutoUnbinder 和 [NSTableCellView release] 返回到 [NSAutoreleasePool drain]。这不是每次都会发生,但偶尔会发生。
我删除了通过一对一关系绑定的列,它永远不会崩溃。如果我在 SourceGroup 上添加一个非核心数据属性,它只是从首选媒体关系返回图像,然后绑定到 SourceGroup 上的该属性,它永远不会崩溃。
字段的类型无关紧要。如果我通过关系绑定,它(有时)会在关闭时崩溃,无论是 String 还是 NSImage。
我什至尝试将我的核心数据对象生成为 Objective C 而不是 Swift,但这对行为没有任何影响。无论我如何更改一个常量,如果我通过关系绑定表列中的视图,它有时会在关闭时崩溃。然而,在细节方面,如果我通过 selectionIndex 绑定到相同的字段,它可以正常工作并且永远不会崩溃。只有在大纲视图中才会发生崩溃。
我知道描述可能有点模糊,所以我准备了一些截图,不幸的是我似乎缺乏足够的声誉来分享它们。我将尝试描述设置。
树控制器处于实体模式,实体设置为 SourceGroup。它的源描述符和托管对象上下文绑定到我的视图控制器。
大纲视图的内容绑定到树控制器的arrangedObjects 控制器键。selectionIndexPaths 和排序描述符也绑定到树控制器。
列中 NSImageView 的值绑定到表格单元格视图,模型键路径设置为 objectValue.preferredMedia.thumbnail。
这一切都正确显示,但会导致关闭文档时出现间歇性问题。如果我将缩略图图像属性放入 SourceGroup 然后将该图像视图绑定到 objectValue.thumbnail 我永远不会看到问题
我在文档中没有看到任何关于这种设置的问题,但我对 OS X 编程也足够新,我可能错过了一些东西。
任何人都可以看到我正在尝试做的事情的问题吗?