在后台线程中使用Couchbase

时间:2018-03-20 11:54:41

标签: ios multithreading background couchbase couchbase-lite

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

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

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

尝试使用Couchbase文档中的方法进行并发支持。但是,只要我在后台线程中创建文档,就会收到线程安全崩溃崩溃。

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

获得以下崩溃:

  

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

请帮忙。

1 个答案:

答案 0 :(得分:4)

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

  • 制作新的serial dispatch queue
  • 创建CBLManager实例
  • 将经理的dispatchQueue属性设置为您创建的队列
  • 您的Couchbase Lite会在您队列中的dispatch_async次来电呼叫。

另外,Couchbase Mobile 2.0 API是线程安全的,如果这是一个绿地项目,您可能需要考虑。