使用非托管对象从不正确的线程访问领域

时间:2019-11-14 01:21:56

标签: swift realm

领域文档说T(value:Any)创建了一个非托管对象,并且此类对象在不同线程中没有问题处理,这是怎么回事?

current = current->next;

此代码崩溃:

func getOne<T : Object>(type : T.Type) -> Promise<T> {
        return Promise { seal in
            self.operatingQueue.async {
                autoreleasepool {
                    if let realm = self.openRealm() {

                        let results = realm.objects(T.self)

                        if let first = results.first {
                            let unmanaged : T = T(value: first, schema : .partialPrivateShared())
                            seal.fulfill(unmanaged)
                        }

                    } else {
                        seal.reject(PersistanceError.couldNotOpenDatabase)
                    }
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

错误不是在抱怨您的对象;对您的Realm的投诉。 self.openRealm()的代码实际上是做什么的,为什么这是一个实例方法?您是否尝试过将其替换为常规let realm = try? Realm()。您可以从另一个线程访问领域,但是您需要为该线程实例化Realm对象。您不能在与创建线程不同的线程上使用同一Realm实例。我猜想您是在一个线程上创建并保留Realm,然后尝试在另一个线程上使用它。