核心数据中的单个对象

时间:2011-11-27 07:01:53

标签: macos cocoa core-data cocoa-bindings

我正在开发基于文档的,基于核心数据的MacOS Cocoa应用程序,并且正在使用NSArrayController,我选择了我想要保留的索引(在文档中),以便当用户保存文档并重新打开它时在其他地方选择表中的相同行(/详细视图所在的对象)。有没有办法做到这一点?

我通常可以弄清楚我认为保存NSIndexSet的方法是什么,但我无法弄清楚如何只保存一个特定的对象并将其取回,特别是对于绑定和界面构建器。

谢谢!

1 个答案:

答案 0 :(得分:1)

理论上,这里没有困难。存储selectionIndexes与存储任何其他NSIndexSet没有区别。您只需要创建一个名为 Transformable 属性的实体,可能是selectedRows,然后在保存文件之前将arrayController.selectionIndexes的值放在那里,然后读取它在阅读完文档之后立即出来。你不需要担心其他任何事情,CoreData只会处理它。如果你还没有一个逻辑“root”元素来存储它,那么只需创建一个新实体,也可以在其上使用这样的属性调用UIState并将其存储在那里。

我看到它的方式,你可能实际上并不想将这个值绑定到该实体,原因有两个。首先,您可能不希望单独更改选择以弄脏文档,对吧?我的意思是,也许你这样做,但这听起来更像是一个烦恼而不是一个功能,一般来说,保存选择听起来更像是一个方便而不是一个特许功能。但我不知道你的申请,所以很难说。

另一个原因是看起来如果你在IB中绑定arrayController.selectionIndexesarrayController.contentArray,当它绑定contentArray绑定时,它看起来会写出一个初始值在文档打开时绑定contentArray后立即selectionIndexes,破坏您的真实价值。 (我可以想象它是这样的,'你只是设置内容,所以现在选择的任何先前值都是无效的,让我们一无所知地覆盖它!')所以,至少,如果你绑定了这个值,那你就是'我必须弄清楚一些聪明的方法,以避免你的真正价值被这个初始写入破坏。

在我看来,你最好不要将它直接绑定到模型上,而是将其绑定到文档上的瞬态属性,您可以在保存时读取,并在doc open time写入。这就是我要去的地方。