Cocoa 将表示对多关系的NSSet绑定到NSArrayController的选择

Cocoa 将表示对多关系的NSSet绑定到NSArrayController的选择,cocoa,data-binding,core-data,nsarraycontroller,Cocoa,Data Binding,Core Data,Nsarraycontroller,下面是一个场景。有两个CoreData模型对象A和B,它们之间的关系是A有许多B,由属性setOfBs表示。我想显示两个表,一个列出所有As(表1),另一个列出所有Bs(表2)。当用户选择表1中的项目时,表2中的选择会发生变化,以反映表1中所选项目的setOfBs值。表的内容不会更改,只会更改所选内容。如果表1中的选择发生变化,它将改变setOfBs,以反映这一点 这可以通过绑定实现吗?还是需要自定义逻辑?我相信您必须编写额外的逻辑才能使这种方法起作用。原因如下:NSArrayControlle

下面是一个场景。有两个CoreData模型对象A和B,它们之间的关系是
A
有许多
B
,由属性
setOfBs
表示。我想显示两个表,一个列出所有As(表1),另一个列出所有Bs(表2)。当用户选择表1中的项目时,表2中的选择会发生变化,以反映表1中所选项目的
setOfBs
值。表的内容不会更改,只会更改所选内容。如果表1中的选择发生变化,它将改变
setOfBs
,以反映这一点


这可以通过绑定实现吗?还是需要自定义逻辑?

我相信您必须编写额外的逻辑才能使这种方法起作用。原因如下:NSArrayController的选择绑定(以及绑定到它们的所有UI对象)基于选择索引,但当您有一个类型为A的对象时,它会提供一组B对象。假设您有一个用于As的数组控制器和一个用于Bs的数组控制器,那么您需要一种从这些对象到其在Bs数组中的索引的方法,以便为B设置数组控制器的选择。编写这段代码并不难,但我相信单靠绑定无法做到这一点

也就是说,正如你在评论中推测的那样,这似乎不是编辑这种关系的好方法。在常见情况下,TableView选择是UI状态,而不是模型状态。如果您像您描述的那样构建UI,UI状态和模型状态将成为同一事物。我并不是说这是不可能的,或者本质上是不好的,但这并不是做这类事情的“标准”方式。一种常见模式如下所示:


即使是这样的方法也需要额外的逻辑,因为在不编写代码的情况下,似乎没有一种方法(开箱即用)绑定到“不在所选a的集合中的所有B”。同样,编写代码并不困难,但我不清楚这是否可以单独使用绑定来完成。我可能错了,但这是我对情况的理解。

我相信您必须编写额外的逻辑才能使这种方法起作用。原因如下:NSArrayController的选择绑定(以及绑定到它们的所有UI对象)基于选择索引,但当您有一个类型为A的对象时,它会提供一组B对象。假设您有一个用于As的数组控制器和一个用于Bs的数组控制器,那么您需要一种从这些对象到其在Bs数组中的索引的方法,以便为B设置数组控制器的选择。编写这段代码并不难,但我相信单靠绑定无法做到这一点

也就是说,正如你在评论中推测的那样,这似乎不是编辑这种关系的好方法。在常见情况下,TableView选择是UI状态,而不是模型状态。如果您像您描述的那样构建UI,UI状态和模型状态将成为同一事物。我并不是说这是不可能的,或者本质上是不好的,但这并不是做这类事情的“标准”方式。一种常见模式如下所示:


即使是这样的方法也需要额外的逻辑,因为在不编写代码的情况下,似乎没有一种方法(开箱即用)绑定到“不在所选a的集合中的所有B”。同样,编写代码并不困难,但我不清楚这是否可以单独使用绑定来完成。我可能错了,但这是我对情况的理解。

同样,一个典型对多关系编辑器是什么样子的?同样,一个典型对多关系编辑器是什么样子的?