cocoa - NSArrayController 和 Core Data 对象的异构数组

标签 cocoa macos core-data parent-child nsarraycontroller

我正在尝试创建一个 Mac OS 核心数据应用程序,该应用程序具有一组父对象(称为“级别”),每个父对象通过一对多关系包含一组子对象(称为“ block ”)。我有一个成功控制级别数组的 TableView ,以及一个自定义 View 对象,该对象根据 block 模型类的 x 和 y 属性中保存的位置以图形方式绘制 block 。我可以将 block 添加到当前选定的级别、删除它们、在自定义 View 中选择和移动它们,并将文本字段绑定(bind)到 Block 类的各种其他属性,我可以使用这些属性来编辑这些值。所有这些信息都已成功保存到核心数据存储库并从核心数据存储库恢复,没有任何问题输出到调试器。精彩的。我使用了一个 NSArrayController 作为关卡,另一个用于绑定(bind)到当前选择的关卡数组 Controller 的 block ,这是一种非常标准的方式。

现在,我的Block类实际上是一个抽象类,我实际实例化的是Block的各种子类(例如RedBlock、GreenBlock、BlueBlock类)。每个子类都有一组单独的属性,仅适用于该类型的 block (因此 RedBlock 具有其他 block 没有的“文本”属性,BlueBlock 具有整数“值”属性等)。我想创建一个检查器,该检查器将根据当前在自定义 View 中选择的 block 的类型而变化。为了尝试这个,在开始为每种类型的 Bock 创建 subview 之前,我创建了一个文本字段,我想将其绑定(bind)到当前选定的 RedBlock 的“文本”属性,最好在选择其他类型的 block 时不显示任何内容。这就是我被困住的地方。我在实体模式下添加了另一个 NSArrayController,并指定了 RedBlock 作为其类型,以便我可以绑定(bind)到“text”属性,并尝试添加基于类类型的过滤谓词。我还尝试了各种其他配置和绑定(bind),但我要么遇到异常,要么在绑定(bind)到该 Controller 的文本字段中损坏值,或者出现其他奇怪的错误和一般损坏。

我在谷歌上搜索了一个可以处理异构对象数组的检查器示例(因为这本质上就是我想做的),但到目前为止还没有运气。

所以,我的问题是 - 我的处理方式正确吗?我是否应该尝试创建一个 NSArrayController 以某种方式过滤我的 Blocks 数组 Controller 中的选定项目?如果是这样,那应该很简单还是我错过了一些技巧?如果没有,最好的方法是什么?

最佳答案

如果您将检查器限制为显示绑定(bind)到适用于整个选择的属性的 View ,则此方法应该有效。您不需要第二个阵列 Controller 。

要测试这个简单的示例,请尝试创建一个仅包含 block 的数据集,查看绑定(bind)控件加载时不会引发异常,并且它会正确更新对象。

一旦生效,为每种类型创建单独的 View ,并在选择更改时显示和隐藏它们。再次强调,如果您有异构选择,请将它们全部隐藏。

关于cocoa - NSArrayController 和 Core Data 对象的异构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412947/

相关文章:

objective-c - 获取 NSMatrix 内的导出

macos - 屏幕中央窗口

macos - cocoa Mac OSX应用程序关闭声音

macos - NSButtonCell 中的 NSImage 圆角

ios - "Can' t 为源存储找到模型“核心数据错误

iOS 在应用程序崩溃时保存数据

cocoa-touch - NSOperation 由 NSOperationQueue 保留

objective-c - NSURL 返回文件的 id 而不是文件的路径

ios - 在没有打开版本控制的情况下更改核心数据模型

objective-c - 在 32 位上使用 Taglib 时出现运行时错误,在 64 位上工作正常