在后台线程中使用Couchbase

Shy*_*yam 5 multithreading background ios couchbase couchbase-lite

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

但是现在我陷入了一个场景,我需要创建并将文档推送到除main之外的其他线程中,而不是阻止UI.

如何在后台线程中运行Couchbase数据库的一部分以仅支持上述方案.

尝试使用Couchbase文档中的方法进行并发支持.但是,每当我在后台线程中创建文档时,都会收到线程安全崩溃事件.

DispatchQueue.global(qos: .background).async {
   //creating couchbase documents here
}
Run Code Online (Sandbox Code Playgroud)

低于崩溃:

***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'*****THREAD-SAFETY VIOLATION:此数据库正在未创建的线程上使用!请参阅Couchbase Lite文档中的并发性指南.*****

请帮忙.

raj*_*agp 4

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

\n\n
    \n
  • 创建一个新的串行调度队列
  • \n
  • 创建CBLManager实例
  • \n
  • 将 manager\xe2\x80\x99sdispatchQueue属性设置为您创建的队列
  • \n
  • dispatch_async在队列中的呼叫内进行 Couchbase Lite 呼叫。
  • \n
\n\n

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

\n