领域获取结果控制器

时间:2018-11-27 08:19:47

标签: ios swift 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中,领域从数据库中获取所有对象。有什么方法可以在不获取所有缓存的对象的情况下针对特定类型和谓词的对象设置通知吗?预先感谢。

1 个答案:

答案 0 :(得分:0)

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

// 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)
        }
    }