【问题标题】:Realm Fetched Results Controller领域获取结果控制器
【发布时间】:2018-11-27 17:18:18
【问题描述】:

我是 Realm 的新手,之前使用过 Core Data。据我了解,NSFetchedResultsController 的类似物是以下代码:

    observationToken = realm.objects(DBMessage.self).observe { (changes) in
        switch changes {
        case .initial(let messages):
            print("fetched - \(Array(messages))")
        case .update(let results, deletions: let deletions, insertions: let insertions, modifications: let modifications):
            let updates = Array(results)
            print("updates started - \(Thread.isMainThread)")
            insertions.forEach({
                print("updates - \(updates[$0])")
            })
            print("updates finished")
        case .error(let error):
            print("observation error - \(error.localizedDescription)")
        }
    }

但问题是case .initial 领域从数据库中获取所有对象。有没有办法在不获取所有缓存对象的情况下为特定类型和谓词的对象设置通知?提前致谢。

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    当然,您可以在应用过滤器和排序后声明集合观察:

    // just an example
    observationToken = realm.objects(DBMessage.self)
        .filter("isRead == false")
        .sort(byKeyPath: "insertedAt", ascending: false)
        .observe { [weak self] changes in
            switch changes {
            case .initial(let messages):
                // initial collection
                break
            case .update(_, let deletions, let insertions, let modifications):
                break
            case .error(let error):
                print(error)
            }
        }
    

    【讨论】:

    • 但是无论如何都会加载初始集合?如果不从数据库中获取对象,就没有办法添加观察者和接收事件吗?
    • @NikitaPronchik Realm 集合是延迟加载的 (realm.io/docs/swift/latest/#queries),因此除非您访问集合项,否则它们不会从 DB 中读取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2020-10-12
    相关资源
    最近更新 更多