我有一个列表 Documents
在多个日期生成。我需要显示 UITableView
与文件一起,每个部分必须是不同的一天。
我将拥有数千个 Documents
保存在 Realm ,所以我试图找到一种方法来对 Documents
进行分组通过creationDate
而不将过滤文档的结果转储到内存中。
此外,可能会收到一份新文档,因此我必须刷新整个表并将其再次转储到内存中才能添加一个文档。
我找不到任何方法可以做到这一点。我还考虑对结果进行分页,这样我就有一个较小的列表可以在内存中“处理”,但 Realm 也无法分页,所以我不知道如何继续......
我的Document
看起来像这样:
final class Document: Object {
@objc dynamic var createdByUserId: String?
@objc dynamic var creationDate: Date?
@objc dynamic var userId: String?
}
最佳答案
我之前已经解决过这个问题:
方法 1 [非常慢但维护最少]: 在运行时,为文档对象的所有创建日期创建一个包含唯一 startOfDay 日期的数组。将此数组称为 DateGroups。
在每个文档对象中,添加“dateGroup”变量。
final class Document: Object {
@objc dynamic var createdByUserId: String?
@objc dynamic var creationDate: Date?
@objc dynamic var dateGroup: Date?
@objc dynamic var userId: String?
}
现在您可以从特定日期组中提取对象:
realm.objects(Document.self).filter("dateGroup = %@", Particular-Date-Group)
方法2[速度非常快,但需要大量维护]: 您可以像方法 1 中那样声明所有内容。 但是,您必须创建一个维护事件日期组的 Realm 对象。将其命名为 DateGroup,并让它只有一个名为 date 或 startOfDay 的变量。
方法 2 比方法 1 更快,但需要大量维护,因为您必须跟踪何时应添加或删除 dateGroup
关于ios - 按日期对过滤结果进行分组,而不将所有内容转储到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56631309/