ios - 使用主要 ID 更新 Realm 关系

标签 ios swift realm

是否可以通过仅传递关系的 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/

相关文章:

ios - [(NSInputStream *)流读取 :buf maxLength:1024]; returns very huge value

swift - 根据互联网连接刷新watchos应用程序

ios - 使用多个 Realm 时,如何停止所有类出现在具有 0 个实例的所有 Realm 中?

swift - 如何在 Realm 中建模 3 个模型之间的关系?

iOS - 在 LaunchScreen 后设置第一个屏幕

ios - iOS 搜索的应用程序名称可以与 CFBundleDisplayName 不同吗?

ios - UITabBarController setSelectedIndex 性能低下

json - 如何在json swift中解析时保持原始 double 值?

ios - arc4random_uniform 的快速结果并不总是显示在标签中

android - 同时查询两个条件的 Realm