更新与主要ID的领域关系

时间:2016-05-13 03:50:30

标签: ios swift realm

是否可以通过仅传递关系的ID来更新Realm对象的关系?

如果我的Library类有一个List<Books>关系并且我想将两个Libraries合并在一起,我会认为可以这样做:

let bookIds = (firstLibrary.books.toArray() + secondLibrary.books.toArray).map { $0.id }

然后我使用ObjectMapper&amp; SugarRecord:

let changes = ["books": bookIds]
Mapper<T>().map(changes, toObject: secondLibrary)
let realm = self.realm
realm.add(secondLibrary, update: true)

但是书籍清单并没有更新。 我认为这是因为ObjectMapper对主要ID没有任何了解,因此尝试将它们映射到对象中并没有做任何事情。

Realm是否有能力通过主ID更新?如果确实如此,我很乐意重写我的持久性堆栈。

1 个答案:

答案 0 :(得分:1)

供将来参考:在this Github issue上讨论的一种解决方法是修改示例中的对象创建代码:

let books = ["1", "2"].map { realm.objectForPrimaryKey(Book.self, key: $0) }
realm.create(Library.self, values: ["id": "4321", "books": books], update: true)

无法直接传递主键值列表作为传递到create() API的值的一部分来创建Library,并让Realm自动创建或更新Book与这些主键相关联的对象。

相反,此解决方法首先使用Book为每个主键值检索或创建objectForPrimaryKey()个对象,然后使用Library对象创建Book create() 1}}。