使用Core Data支持的NSArrayController在TableView中创建组行

时间:2013-06-08 14:57:17

标签: macos cocoa core-data nstableview nsarraycontroller

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

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

我知道方法

- (BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row
在NSTableViewDelegate中。但是,这暗示我们必须在NSArrayController中将实际行说“读”和“未读”,这些行将被提升为组。由于NSArrayController包含从CoreData中提取的Article对象,我该如何做呢?

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

布尔值isGroupHeader。需要一个简单的tableView:isGroupRow:implementation。

常规数据的NSManagedObject值。当行是组头时为nil。

有了这个,您可以使用所有工具来实现所有NSTableView委托,以获得正确分组的表视图。