带有 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