带有 NSFetchedResultsController 的 UITableView 为没有对象的部分保留标题

Posted

技术标签:

【中文标题】带有 NSFetchedResultsController 的 UITableView 为没有对象的部分保留标题【英文标题】:UITableView with NSFetchedResultsController keep header for section without objects 【发布时间】:2013-01-27 21:49:35 【问题描述】:

我有一堆 NSManagedObjects,它们在 UITableView 中被分成多个部分。

[Section Header 0]
[NSManagedObject]
[NSManagedObject]
[NSManagedObject]
[Section Header 1]
[NSManagedObject]
[Section Header 2]
[NSManagedObject]
[NSManagedObject]
[NSManagedObject]

用户可以按部分编辑对象,包括删除它们。假设我删除了上面[Section 1] 中的[NSManagedObject]。这会更新我的 NSFetchedResultsController 并删除行和部分,包括部分标题。

有没有办法用任何对象保留空白部分?我考虑过放入一些代码来设置节的最小计数,但问题是它不会与 NSFetchedResultsController 同步。添加额外的部分只会将其添加到底部,但我想在第一部分之后添加它,无论之后是否有一个或多个部分。

这些对象都是服务器驱动的,所以我想做这样我就不会有很多硬编码的部分。

谢谢。

【问题讨论】:

【参考方案1】:

您应该在数据模型中包含属性或关系以跟踪各个部分。看到您对用户进行分组,您必须有一个可以在数据中建模的标准。

然后将NSFetchedResultsController 初始化为适当的sectionNameKeyPath。使用 Apple 的普通代码显示部分信息(如果有)。

您在每个部分中实际显示的内容仍取决于您。 (这是您在数据源方法中放入的内容)。但至少你可以有一个一致的部分系统和对象分组。

【讨论】:

感谢您的回答。关于做一个 UITableView 的任何建议,其中部分是一个 NSManagedObject 并且行是它与其他 NSManagedObjects 的关系? 是的。只需像这样使用sectionNameKeyPath:(例如,对于“员工”)@"department.name"

以上是关于带有 NSFetchedResultsController 的 UITableView 为没有对象的部分保留标题的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 3 中难以配置 NSFetchedResultsController

如何根据计算的属性过滤来自 NSFetchedResultsController 的结果?

为啥 beginUpdates/endUpdates 会重置表视图位置以及如何阻止它这样做?

带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName

使用带有 uuencode 的“sendmail”发送邮件,并带有主题

带有和不带有聚合的 sql 查询