按日期对过滤结果进行分组,而不将所有内容转储到内存中

时间:2019-06-17 12:27:58

标签: ios swift realm

我有一个在多个日期生成的Documents列表。我需要出示带有文档的UITableView,每个部分的日期必须不同。

我将在域上保存数千个Documents,所以我试图找到一种方法将Documents的{​​{1}}分组,而不会转储过滤出的结果。文档存储。

还可能会收到一个新文档,所以我不得不刷新整个表并将其再次转储到内存中,只是为了添加一个文档。

我找不到任何办法。我还考虑对结果进行分页,因此我在内存中有一个较小的列表要“处理”,但是Realm也无法分页,因此我不确定如何继续...

我的creationDate如下:

Document

1 个答案:

答案 0 :(得分:0)

我之前已经解决了这个问题:

方法1 [非常慢,但维护最少] : 在运行时,为文档对象的所有creationDate创建一个包含唯一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?
 }

现在您可以从特定的dateGroup中拉出对象:

realm.objects(Document.self).filter("dateGroup = %@", Particular-Date-Group)

方法2 [非常快,但需要较高的维护] : 您可以像方法1中那样声明所有内容。 但是,您必须创建一个保持活动dateGroups的Realm对象。将其命名为DateGroup,并使其只有一个名为date或startOfDay的变量。

方法2比方法1快,但需要较高的维护,因为您必须跟踪应何时添加或删除dateGroup