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

时间:2015-08-31 01:53:29

标签: macos core-data cocoa-bindings nsoutlineview nstreecontroller

构建环境:Xcode 7 beta 7 OS X:10.10.5 斯威夫特2

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

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

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

一切都很好但有些当我关闭文档时,我在_NSGetUsingKeyValueGetter中获得了一个EXC_BAD_ACCESS,它通过[NSAutoreleasePool drain]返回NSAutoUnbinder和[NSTableCellView release]。这种情况不会每次都发生,但偶尔也会发生。

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

该字段的类型无关紧要。如果我通过关系绑定,它(有时)会在关闭时崩溃,无论是String还是NSImage。

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

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

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

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

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

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

我没有在文档中看到有关此类设置存在问题的任何内容,但我对OS X编程也是新的,我可能已经错过了一些东西。

任何人都可以看到我正在尝试做的事情吗?

1 个答案:

答案 0 :(得分:1)

我在Core Data,treecontroller和图像方面遇到了类似的问题。托管对象上下文在outlineview和treecontroller之前发布。上下文在绑定移除其观察者之前将管理对象转换为错误。 解决方法是在窗口关闭时将树控制器的内容设置为nil。