通过一对一关系绑定时文档关闭时崩溃

crash on document close when binding trough one-to-one relationship

构建环境:Xcode7 beta 7 OS X: 10.10.5 Swift2

我有一个项目正在使用 github 中的 BSManagedDocument class 将核心数据包装到 NSDocument 中。我正在使用 Cocoa 绑定通过 NSTree 控制器将数据从核心数据获取到 NSOutlineView。

对象模型相当简单。绑定到树控制器的对象(称为 SourceGroup_)与其自身具有一对多关系,以为树控制器提供分层数据。它还与提供 URL 关联媒体(图像、视频等)。

大纲视图绑定了三列,其中两列绑定到主要对象的属性,而第三列是来自一对一媒体关系的缩略图。

一切都显示正常,但有时当我关闭文档时,我在 _NSGetUsingKeyValueGetter 中得到一个 EXC_BAD_ACCESS,它通过 NSAutoUnbinder 和 [NSTableCellView release] 通过 [NSAutoreleasePool drain] 返回。这不是每次都会发生,但偶尔会发生。

我删除了通过一对一关系绑定的列,它永远不会崩溃。如果我在 SourceGroup 上添加一个非核心数据 属性,它只是 returns 来自 preferredMedia 关系的图像,然后绑定到 SourceGroup 上的那个 属性,它永远不会崩溃。

字段的类型是什么并不重要。如果我通过关系进行绑定,它(有时)会在关闭时崩溃,无论是 String 还是 NSImage。

我什至尝试将我的核心数据对象生成为 Objective C 而不是 Swift 但这对行为没有影响。无论我更改什么,一个常量是,如果我通过关系绑定 table 列中的视图,它有时会在关闭时崩溃。然而,在细节方面,如果我通过工作正常且从不崩溃的 selectionIndex 绑定到相同的字段。只有在大纲视图中才会发生崩溃。

我知道描述可能有点模糊,所以我准备了一些屏幕截图,不幸的是我似乎缺乏足够的声誉来分享它们。我将尝试描述设置。

树控制器处于实体模式,实体设置为 SourceGroup。它的源描述符和托管对象上下文绑定到我的视图控制器。

大纲视图的内容绑定到树控制器的 arrangedObjects 控制器键。 selectionIndexPaths 和排序描述符也绑定到树控制器。

列中 NSImageView 的值绑定到模型键路径设置为 objectValue.preferredMedia.thumbnail 的 table 单元格视图。

这一切都能正常显示,但会导致关闭文档时出现间歇性问题。如果我将缩略图 属性 放入 SourceGroup,然后将该图像视图绑定到 objectValue.thumbnail,我永远不会看到问题

我在文档中没有看到任何关于此类设置的问题,但我对 OS X 编程也很陌生,所以我可能错过了一些东西。

有人能看出我正在尝试做的事情有问题吗?

我在使用 Core Data、treecontroller 和 images 时遇到了类似的问题。 managed object context 在 outlineview 和 treecontroller 之前被释放。在绑定移除其观察者之前,上下文将托管对象转变为故障。 解决方法是在 window 关闭时将 treecontroller 的内容设置为 nil。