【问题标题】:Create group rows in NSTableView using CoreData backed NSArrayController使用 CoreData 支持的 NSArrayController 在 NSTableView 中创建组行
【发布时间】:2013-06-04 17:50:48
【问题描述】:

假设我有一堆 Article 对象存储在核心数据模型中。每篇文章都维护一个阅读进度属性,该属性表示用户已阅读了多少文章。一旦用户完全阅读了该文章,该文章就被标记为“已读”。在此之前,它将被标记为“未读”。

现在我有一个 NSTableView 绑定到一个 NSArrayController 包含使用 CoreData 存储的所有文章对象。我希望它显示“未读”组下的所有未读文章,以及“已读”组下的所有已读文章。

我知道方法

- (BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row

在 NSTableViewDelegate 中。但是,这暗示我们必须在 NSArrayController 中有实际的行表示“已读”和“未读”,这些行将被提升为组。由于 NSArrayController 包含从 CoreData 中提取的 Article 对象,我该怎么做呢?

注意:这是我在这里的第一个问题,我是 Cocoa 的新手,请放轻松:)

【问题讨论】:

  • 2 岁了,仍然没有答案。在此期间您找到解决方案了吗?
  • 我也在寻找这样的功能,但没有找到解决方案。你能做到吗。如果是的话,你能告诉我如何做到这一点。
  • 一种解决方案是使用像这样的第 3 方 FRC github.com/konstantinpavlikhin/KSPFetchedResultsController

标签: macos cocoa core-data nstableview nsarraycontroller


【解决方案1】:

我建议使用 NSOutlineview 和 NSTreeController 来创建分组,而不是 NSTableView 和 NSArrayController。

【讨论】:

    【解决方案2】:

    您必须使用自定义类实例手动填充 NSArrayController,该类实例完全包含您想要完成的 NSTableView 的内容,包括组行。控制器必须以正确的顺序填写。所以它应该从一个组头对象开始,然后是一些数据对象,一个新的头对象,等等。自定义类应包含以下属性:

    组头的字符串值。当行没有组头时为 nil。

    布尔值是GroupHeader。需要简单的 tableView:isGroupRow: 实现。

    常规数据的 NSManagedObject 值。当该行是组标题时为 nil。

    有了这个,你就拥有了实现所有 NSTableView 委托以获得正确分组的表格视图的所有工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多