Swift Realm 将预取对象保存到新对象中

标签 swift database multithreading thread-safety realm

我在使用 Realm 时遇到了一些问题。基本上,我在后台使用 Alamofire 从 API 中获取对象,使用 ObjectMapper 将它们映射到一个对象,在后台使用 Realm 保存,然后返回到主线程以显示它们。我知道 Realm 对象在被管理时是线程限制的,但我仍然对保存后如何使用它们感到困惑:

1) 获取数据,映射并保存:

network.makeCallWith(urlRequest: objCreation, objectType: objType.self) { (response) in......

//.....
DispatchQueue.global(qos: .background).async {

        do {

            let realm = try Realm()

            try realm.write {

                for obj in objects { //obj in response

                    realm.add(obj,update: true)
                }

            }
        } catch let error as NSError {

            print(error)
        }

        DispatchQueue.main.async {

            do {

                let realm = try Realm()

                let objects = realm.objects(T)

                completion(Result.success(Array(objects)))

            } catch let error as NSError {

                print(error)
            }

        }
    }

此时我可以在主线程中使用该对象。问题是当我必须保存在这个对象之后获取的另一个对象时,并且需要将先前保存的对象作为属性(关系)。我收到“无法添加来自不同 Realm 的对象”错误。

这是将以前保存的对象用作另一个对象的属性的好方法吗?

最佳答案

请使用ThreadSafeReference 包装器以便在线程之间传递 Realm 对象:https://realm.io/docs/swift/latest/#passing-instances-across-threads

关于Swift Realm 将预取对象保存到新对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44190505/

相关文章:

C# - 不时检查文件是否存在并从中读取

swift - 在 SKScene 中定位 SKSpriteNode 的问题

ios - 动画和隐藏横幅 Admob

c# - 有效地更新表的详细信息?

database - 错误 : Could not open input file: partisan

从按钮启动的 Android 线程

java - MySQL事务回滚异常: Deadlock found when trying to get lock;

ios - 带有 LongPressGestureRecognizer 的 Mapkit 间歇性工作

Apple Maps 中 UI 菜单的 iOS 名称

database - 如何使用命令行使用凭据连接到 Docker 容器?