我尝试添加使用realm将以前导出的数据库加载到手机应用中的功能。数据库包含在一个zip文件中,我将其从电子邮件中导入应用程序,将其解压缩,然后将realm文件写入应用程序本地存储。写入文件后,我正在加载备份域文件,查询对象,然后将它们写入当前域。
在我导出一个在其中一个关系中设置了数据的对象之前,这确实可以正常工作。下面是我用来导入db的代码:
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代码= 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?;
}
当我导入的数据库创建了枪支图像时,我开始收到该错误。
我还尝试完全替换似乎有效的域文件,但只有在我关闭应用程序并重新打开它之后。我的目标是能够导入一个db文件并让它重新加载应用程序中可查看的数据,而不必杀死它并重新打开。
任何人都知道什么可能导致抛出异常?
答案 0 :(得分:0)
我不相信当您将父对象移动到另一个Realm时,它们会自动与父对象一起复制。
当你循环遍历每个对象时,你很可能需要检查是否有任何子对象,先复制它们,然后再复制父对象,然后确保它们仍然在你的新对象中链接副本。
如果这不起作用,请告诉我!