8

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

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

我知道方法

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

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

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

4

2 回答 2

0

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

组头的字符串值。当行没有组标题时为零。

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

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

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

于 2017-10-16T11:22:24.070 回答
0

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

于 2016-06-07T11:14:07.420 回答