将所有对象从一个Realm复制到另一个Realm

时间:2016-01-31 03:38:37

标签: ios swift realm

我尝试添加使用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文件并让它重新加载应用程序中可查看的数据,而不必杀死它并重新打开。

任何人都知道什么可能导致抛出异常?

1 个答案:

答案 0 :(得分:0)

我不相信当您将父对象移动到另一个Realm时,它们会自动与父对象一起复制。

当你循环遍历每个对象时,你很可能需要检查是否有任何子对象,先复制它们,然后再复制父对象,然后确保它们仍然在你的新对象中链接副本。

如果这不起作用,请告诉我!