领域查询未在后台完成

时间:2019-10-27 14:14:34

标签: swift realm

我正在为文档中的每个单词运行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()
    }

 }

0 个答案:

没有答案