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

标签 ios swift realm

我有一个列表 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/

相关文章:

ios - CKQueryOperation 中的 RequestRateLimited

ios - 我可以使用什么服务在 IOS 上快速发送推送通知

ios - 消息 ' do not match any available overloads' 是什么意思?

ios - 根据 RLMArray 属性的大小查询所有对象的 Realm ?

ios - Realm iOS 教程,从头开始构建 iOS 应用程序,写入失败

ios - 自定义 UIView 初始化程序的便利初始化程序必须使用 self.init 错误进行委托(delegate)

ios - 如何在 iPhone 上以编程方式在 Swift 中将 UIViewController 呈现为弹出窗口

ios - UIView 没有动画的原因

ios - UIImageJPEGRepresentation Swift 的错误循环

ios - 使用 Objective-C 在 Realm 中捕获写入错误的正确方法是什么?