在后台线程中使用 Couchbase

Using Couchbase in background thread

我正在开发一个使用 Couchbase 同步文档的应用程序。现在我在主线程上创建并使用相同的所有文档。

但现在我陷入了一个场景,我需要在主线程之外的其他线程中创建和推送文档,而不是阻塞 UI。

我怎样才能运行 Couchbase 数据库在后台线程中的部分只支持上述场景。

尝试了 Couchbase 文档中的并发方法 support.But 收到 线程安全崩溃 每当我像这样在后台线程中创建文档时崩溃提示。

DispatchQueue.global(qos: .background).async {
   //creating couchbase documents here
}

跌破崩溃:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '***** THREAD-SAFETY VIOLATION: This database is being used on a thread it wasn't created on! Please see the concurrency guidelines in the Couchbase Lite documentation. *****

请帮忙。

1.x 中的 Couchbase Lite API 不是线程安全的,并且支持线程限制模型。所以你不能跨线程共享对象 - 换句话说,如果你在主线程上创建了一个 CBLDatabase 对象,你不能在后台线程上使用该实例。您将必须为后台线程创建一个新实例。 所以请执行以下操作:

  • 新建一个serial dispatch queue
  • 创建一个 CBLManager 实例
  • 将经理的 dispatchQueue 属性 设置为您创建的队列
  • 你的 Couchbase Lite 调用在你的队列中 dispatch_async 调用。

顺便说一句,Couchbase Mobile 2.0 API 是线程安全的,如果这是一个新建项目,您可能需要考虑这一点。