【问题标题】:NSArrayControllers and heterogeneous arrays of Core Data objectsNSArrayControllers 和 Core Data 对象的异构数组
【发布时间】:2011-06-20 14:39:22
【问题描述】:

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

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

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

所以,我的问题是 - 我这样做的方式是否正确?我是否应该尝试创建一个 NSArrayController 以某种方式过滤我的 Blocks 数组控制器中的选定项目?如果是这样,那应该是直截了当的还是我错过了一些技巧?如果没有,最好的方法是什么?

【问题讨论】:

  • 嗯,我也有这个需求,想知道你有没有突破……

标签: cocoa macos core-data parent-child nsarraycontroller


【解决方案1】:

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

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

一旦工作,为每种类型创建单独的视图,并在选择发生变化时显示和隐藏它们。同样,如果您有一个异构选择,请将它们全部隐藏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多