【发布时间】:2017-05-25 22:02:49
【问题描述】:
我在使用 Realm 时遇到了一些问题。基本上,我在后台使用 Alamofire 从 API 获取对象,使用 ObjectMapper 将它们映射到对象,在后台使用 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)
}
}
}
此时我可以在主线程中使用该对象。问题是当我必须保存我在这个对象之后获取的另一个对象时,并且需要以前保存的对象作为属性(关系)。我收到“无法从其他领域添加对象”错误。
这是将以前保存的对象用作另一个对象的属性的好方法吗?
【问题讨论】:
标签: swift database multithreading thread-safety realm