我正在为文档中的每个单词运行Realm查询,并使用结果突出显示某些单词。由于我有很多查询,所以下划线不会立即显示是很好的,所以我想在后台运行它们。
我在文档中看到,如果将观察者添加到结果集中,Realm将在后台执行该操作。但是,查询仍然阻塞了我的主线程(即,粘贴文本的多个段落并查询每个单词时,我会明显滞后)。
我还在文档中看到,如果我尝试使用.initial
消息之前的结果集,则Realm进入主队列。我也不认为我在下面的代码中这样做。
这可能是使令牌无效的方法吗?
有什么办法可以迫使Realm停留在后台线程上?
我希望避免在线程之间传递引用的复杂性,如果我在后台线程中实例化了Realm,那我将不得不这样做。
print("db: hit \(word)")
let results = Shared.instance
.realm
.objects(google10kWords.self).filter("word == \"\(word.lemma.lowercased())\"")
let notificationToken = results.observe { (change) in
switch change {
case .initial:
if let rank = results.first?.rank.value {
let rankPct = Float((Float(rank)/10000.0))
complete(rankPct)
} else {
complete(1.0)
}
case .update(_, deletions: _, insertions: _, modifications: _):
print("db: update")
case .error(let error):
print("db: Error \(error)")
}
}
DispatchQueue.main.asyncAfter(deadline: .now()+1.2) {
notificationToken.invalidate()
}
}