gpt4 book ai didi

iOS - 将元素附加到 Realm 中的列表不会保留元素

转载 作者:行者123 更新时间:2023-11-28 08:31:32 26 4
gpt4 key购买 nike

我正在使用以下代码将歌曲添加到我的播放列表对象中的列表:

func addSongsForPlaylist(songs: [Song], list: Playlist) {
try! realm!.write {
for song in songs {
list.RLMsongs.append(song)
}
}
}

songs 只是我要添加的歌曲的数组。 songs 中的歌曲是非持久化对象(尚未在 realm 中),但 list 已在 Realm 中持久化。

我在 stackoverflow 上发现了很多问题,这些问题似乎都在问同样的问题,但他们所有的解决方案都与将追加包装在写入事务中有关,如您所见,我已经在做。

我也试过以下方法:

try! realm!.write {
list.RLMsongs.appendContentsOf(songs)
}

发生的事情是,如果我在控制台中输入 po list.RLMsongs,新歌就会出现并且看起来很棒,但是如果我输入 po list,它的 RLMsongs 属性缺少新歌。怎么可能两者都是真的?它似乎自相矛盾,似乎我缺少关于 RealmSwift 的一些基本知识。

看起来它正在更新内存中的列表,但实际上并没有提交给 Realm。因此,我认为写 block 可能没有正确提交并将其包装在 do catch 中,但 catch 从未运行,因此写事务应该成功提交。

编辑:

此外,我注意到我能够删除写事务并且它不会给我一个错误。我认为这可能是了解这里发生的事情的线索。列表是否可能被认为是非持久化的,因此即使列表的内容(歌曲)是持久化对象,也根本无法在 Realm 中正确更新?

最佳答案

那是因为po list显示的是Realm对象的实例变量的内容,而不是Realm的内容。 Realm 不会将数据库的所有内容复制到对象实例的实例变量中,因为那样会非常浪费。

Realm 提供了一个 LLDB 插件 ( rlm_lldb.py ),它教调试器显示实际的 Realm 支持的内容,而不是未使用的实例变量。但是,由于用于 Swift 语言支持的 LLDB Python API 的限制,它仅适用于 Objective-C 堆栈帧。

关于iOS - 将元素附加到 Realm 中的列表不会保留元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38793128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com