【问题标题】:Problems with cocoa bindings w/ master-detail where the detail contains an array带有主细节的可可绑定问题,其中细节包含一个数组
【发布时间】:2017-03-16 14:30:34
【问题描述】:

这是一个 macOS 应用程序,使用核心数据,没有文档,也没有故事板。我正在尝试使用 NSArrayControllers 和绑定来显示我的数据。

数据模型2个实体: 书籍(具有作者、标题、简介等属性)和 章节(具有标题等属性)

这两个实体以一对多的关系连接:

Book.chapters > Chapter.book.

该应用可以有多本书,它显示在一个 tableView 中。很简单。我在 XCode 中设置了一个名为“Books Array Controller”的数组控制器。我将其实体设置为“书”并检查“准备内容”。

这是一个主细节,其中细节的属性之一是一个数组,将显示在它自己的表中。这就是给我带来问题的原因。

我将 Books Array Controller 绑定如下:
1、managedObjectContext绑定到Delegate的self.managedObjectContext。 2. bookListTableView 的 Table Content > 内容绑定到“Books Array Controller”控制器键=排列对象。
3. 然后对于表格中的每一列,我选择 textViewCell 并将其值绑定到“表格单元格视图”模型键路径 = objectValue.title、objectValue.author 等。
4.我有一个textView,通过将Attributed String绑定到“Books Array Controller”控制器键=选择,模型键路径=blurb来选择书籍的“blurb”(属性字符串)。

所有这些都很好。

但是我在试图弄清楚如何在另一个表中显示章节列表时遇到了很多问题。我尝试创建另一个名为“Chapters Controller”的数组控制器。我将其实体设置为“章节”并检查“准备内容”。

我绑定章节控制器如下: 1、managedObjectContext绑定到Delegate的self.managedObjectContext。 (就像另一个)
2.Controller Content>内容集绑定“Books Array Controller”控制器key=selection,model key path=champions.
3.我将表格的内容绑定到“章节控制器”控制器键=选择,模型键路径=章节。
4.然后对于表格中的每一列,我选择textViewCell并将其值绑定到“表格单元格视图”模型key path = objectValue.title等

第二张表中没有任何显示,即章节列表。甚至没有一堆“表格视图单元”的东西。它是空的。我已经尝试了很多我不会让你厌烦的变化。显然我缺少一些东西。有什么帮助吗?

应用程序正确地制作了它的 Book 对象,并且 Books 似乎正确地制作了它们的 Chapter 对象。

——

更新:我已尝试听从 Willeke 的建议,但仍然做得不对。

这里是绑定...

图书控制器绑定:

章节控制器绑定:

Books TableView 绑定:

章节 TableView 绑定:

【问题讨论】:

  • 将 table view 的 selectionIndexes 绑定到数组控制器上。
  • 我会摆弄它,但是有 2 个表视图和 2 个数组控制器。您是否建议我绑定第一本书列表 tableView selectionIndexes?到... ?我尝试将类似书本的 tableview 的 selectionIndexes 绑定到 BookArrayController 的 selectionIndexes (并且还为它安排了对象),但没有奏效。

标签: macos core-data cocoa-bindings nsarraycontroller


【解决方案1】:

Chapters 数组控制器的内容集绑定到 Books 数组控制器的选择。当您在 Books 表视图中选择一行时,Books 数组控制器的选择必须通过绑定选择索引来同步。我通常将内容绑定到arrangedObjects,将选择索引绑定到selectionIndexes,并将排序描述符绑定到sortDescriptors

Chapters 表视图的绑定与 Books 表视图相同。将章节表视图的内容绑定到章节数组控制器的排列对象。

【讨论】:

  • 感谢您的帮助。我显然做得不对。我截取了绑定的屏幕截图并将它们添加到上面的问题中。
  • 选择索引应该绑定到selectionIndexes。我编辑了我的答案。
  • 这成功了。非常感谢。为了完整性(对于遇到此问题的任何人),为了使 sortDescriptors 绑定(从 tableView 到 arrayController)实际执行任何操作,您需要转到该表中的每个 tableColumn。在属性检查器中,确保您为排序键输入了适当的值。 Xcode 然后在下面的选择器文本字段中自动填充“比较:”,这对我有用。
猜你喜欢
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
相关资源
最近更新 更多