我正在尝试使用 Realm 添加将以前导出的数据库加载到手机应用程序中的功能。数据库包含在一个 zip 文件中,我从电子邮件中将其导入到应用程序中,将其解压缩,然后将 Realm 文件写入应用程序本地存储。将其写入文件后,我将加载备份 Realm 文件、查询对象,然后将它们写入当前 Realm 。
在我导出一个在其中一个关系中设置了数据的对象之前,这确实可以正常工作。下面是我用来导入数据库的代码:
let config = Realm.Configuration(path: newPath.path, readOnly: true);
let newRealm = try! Realm(configuration: config);
let realm = try! Realm();
try! realm.write {
realm.deleteAll();
}
let firearms = newRealm.objects(Firearm);
try! realm.write {
for firearm in firearms {
realm.create(Firearm.self, value: firearm);
}
}
现在,每次我尝试调用 realm.create 时,我都会收到 EXC_BAD_ACCESS code=2 错误,并且不确定是什么导致了它。
枪械型号如下:
class Firearm: Object {
dynamic var id = "";
dynamic var label = "";
dynamic var manufacturer = "";
dynamic var model = "";
let images = List<FirearmImage>();
let documents = List<FirearmDocument>();
let maintRecords = List<FirearmMaintenance>();
let accessories = List<Accessory>();
}
这是枪支图像模型:
class FirearmImage: Object {
dynamic var id = "";
dynamic var fileName = "";
dynamic var firearm: Firearm?;
}
当我导入的数据库创建了枪支图像时,我开始收到该错误。
我也尝试过完全替换似乎有效的 Realm 文件,但只有在我关闭应用程序并重新打开它之后。我的目标是能够导入一个数据库文件并让它重新加载在应用程序中可见的数据,而不必杀死它并重新打开。
任何人都知道可能导致抛出异常的原因是什么?
最佳答案
我不相信当您将子对象移动到另一个 Realm 时,子对象会自动与它们的父对象一起复制。
当你遍历每个对象时,你很可能需要检查是否有任何子对象,首先复制它们,然后是父对象,然后确保它们仍然链接在你的新对象中复制。
如果这不起作用,请告诉我!
关于ios - 将所有对象从一个 Realm 复制到另一个 Realm ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35110065/