是否可以通过仅传递关系的 id 来更新 Realm 对象的关系?
如果我有一个 Library
具有 List<Books>
的类关系,我想合并两个 Libraries
在一起,我认为可以这样做:
let bookIds = (firstLibrary.books.toArray() + secondLibrary.books.toArray).map { $0.id }
然后我使用 ObjectMapper 和 SugarRecord:
let changes = ["books": bookIds]
Mapper<T>().map(changes, toObject: secondLibrary)
let realm = self.realm
realm.add(secondLibrary, update: true)
但是图书列表没有得到更新。 我认为这是因为 ObjectMapper 对主要 ID 一无所知,因此尝试将它们映射到对象中不会做任何事情。
Realm 是否可以通过主 ID 进行更新?如果是这样,我很乐意重写我的持久性堆栈。
最佳答案
供将来引用:一种解决方法,已在 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
对象。
相反,此解决方法首先使用 objectForPrimaryKey()
为每个主键值检索或创建 Book
对象,然后创建 Library
通过 create()
使用那些 Book
对象。
关于ios - 使用主要 ID 更新 Realm 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37200924/