Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSArrayController和核心数据对象的异构阵列_Cocoa_Macos_Core Data_Parent Child_Nsarraycontroller - Fatal编程技术网

Cocoa NSArrayController和核心数据对象的异构阵列

Cocoa NSArrayController和核心数据对象的异构阵列,cocoa,macos,core-data,parent-child,nsarraycontroller,Cocoa,Macos,Core Data,Parent Child,Nsarraycontroller,我正在尝试创建一个Mac OS Core数据应用程序,它有一个父对象数组(称为级别),每个父对象数组通过一对多关系包含一个子对象集合(称为块)。我有一个表视图成功地控制了标高数组,还有一个自定义视图对象,它根据块模型类的x和y属性中的位置以图形方式绘制块。我可以将块添加到当前选定的标高,删除它们,在自定义视图中选择并移动它们,并将文本字段绑定到块类的各种其他特性,我可以使用这些特性编辑这些值。所有这些信息都已成功保存并从核心数据存储库中恢复到核心数据存储库中,并且不会向调试器输出任何问题。精彩的

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

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

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


所以,我的问题是——我这样做对吗?我是否应该尝试创建一个NSArrayController,以某种方式过滤块阵列控制器中的选定项?如果是这样的话,这应该是直截了当的,还是我错过了一些技巧?如果没有,那么最好的方法是什么?

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

要测试这个简单的示例,请尝试创建一个仅包含块的数据集,查看绑定控件是否加载而不引发异常,以及它是否正确更新了对象


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

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

要测试这个简单的示例,请尝试创建一个仅包含块的数据集,查看绑定控件是否加载而不引发异常,以及它是否正确更新了对象


一旦工作正常,为每种类型创建单独的视图,并在选择更改时显示和隐藏它们。同样,如果你有一个异类选择,把它们全部隐藏起来。

嗯,我也需要这样做,我想知道你是否有任何突破……嗯,我也需要这样做,我想知道你是否有任何突破…