核心数据和绑定 - 绑定复选框到多对多关系的结果

时间:2014-07-13 02:45:21

标签: objective-c cocoa core-data cocoa-bindings

核心数据模型

我在两个主要实体之间有多对多的关系;称他们为项目标记。会有大量的文件。每个可以有0到任意数量的标签。

每个 Item 实体相关地具有名为 name 的属性,以及与Tag称为标记的多对多关系。每个标记实体都相关地具有名为 name 的属性,以及与Item名为 items 的多对多关系。

要在同一窗口中显示它们,我有:(i)NSTableView( itemTableView ),由NSArrayController( itemArrayController )提供,显示所有项目; (ii)NSTableView( tagTableView ),由显示所有列表的不同NSArrayController( tagArrayController )提供。

tagTableView

在tagTableView中,表视图绑定到tagArrayController,并使用controllerKey arrangeObjects。

只有一个表格列。其中的文本字段绑定到表单元格视图,以模拟关键路径objectValue.name。到目前为止工作;它按预期显示所有列表,并在添加排序描述符时正确排序。

使用Xcode中的界面构建器设置了所有内容。

问题

我在tagTableView中添加了一个复选框,与textfield在同一个表列中。我正在尝试实现两件事:

  1. 如果用户之前已将项目与相关标签相关联,则应检查该复选框。如果没有,则应取消选中该复选框。
  2. 如果用户选中未选中的复选框,我想在两者之间建立关系;如果用户取消选中已选中的复选框,我想打破这种关系。
  3. 基础行为模式是用户不一定能控制标签,也可能无法创建标签。它们要从现有标签中进行选择,因此应该能够看到存在哪些标签,并且能够检查/取消选中适用的标签。

    但是,我无法看到如何实现这一点。

    到目前为止的部分解决方案

    我可以看到一种可能的方法,至少以编程方式执行第一项任务,大致如下:

    1. 监视itemTableView的tableViewSelectionDidChange
    2. 要进行更改,请手动更新tagTableView的数据源,并通过检查与刚刚选择的Item实体相关的那些标签以及取消选中它们来计算复选框状态
    3. 但是,这看起来可能会增加复杂性,理想情况下,如果可能,我希望通过绑定来实现此目的。

      我已经查看了Apple Core Data和Bindings的参考资料,我所有的Cocoa书籍,堆栈溢出,我也做了大量的谷歌搜索。我发现了很多类似的问题(例如http://lists.apple.com/archives/cocoa-dev/2011/Mar/msg00164.html),但没有答案。

      我还找到了一种可能以编程方式工作的方法,但这似乎与我上面的想法相似,但代价是能够使用绑定(例如http://www.raywenderlich.com/14742/core-data-on-ios-5-tutorial-how-to-work-with-relations-and-predicates

      本网站上唯一相关的问题 - Core-Data Check Box Cell with many-to-many data - 没有回答我可以使用的级别。

      在我看来,这应该是绑定的主要候选人。我应该能够询问itemArrayController哪些标签(如果有的话)与其所选项目有关系,然后设置复选框以勾选它是否与相关标签匹配,如果不匹配则取消设置。我希望我能够在界面构建器中的复选框本身的绑定中执行此操作。但我无法确定要使用的模型键路径或绑定,或者为复选框设置可可绑定的内容。我错过了一些明显的东西吗谢谢

0 个答案:

没有答案