我正在开发一个使用Couchbase来同步文档的应用程序。现在我在主线程上创建的所有文档都使用相同的文档。
但是现在我陷入了一个场景,我需要创建并将文档推送到除main之外的其他线程中,而不是阻止UI。
如何在后台线程中运行Couchbase数据库的一部分以仅支持上述方案。
尝试使用Couchbase文档中的方法进行并发支持。但是,只要我在后台线程中创建文档,就会收到线程安全崩溃崩溃。
DispatchQueue.global(qos: .background).async {
//creating couchbase documents here
}
获得以下崩溃:
***因未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'***** THREAD-SAFETY VIOLATION:此数据库正在未创建的线程上使用 上!请参阅Couchbase Lite中的并发性指南 文档。 *****
请帮忙。
答案 0 :(得分:4)
1.x中的Couchbase Lite API不是线程安全的,并且支持线程限制模型。因此,您无法跨线程共享对象 - 换句话说,如果您在主线程上创建了CBLDatabase
对象,则无法在后台线程上使用该实例。您必须为后台线程创建一个新实例。
请执行以下操作:
CBLManager
实例dispatchQueue
属性设置为您创建的队列dispatch_async
次来电呼叫。另外,Couchbase Mobile 2.0 API是线程安全的,如果这是一个绿地项目,您可能需要考虑。