我用下面的代码添加歌曲到一个列表,我的播放列表对象:iOS版 - 追加元素境界列表中不坚持元素
func addSongsForPlaylist(songs: [Song], list: Playlist) {
try! realm!.write {
for song in songs {
list.RLMsongs.append(song)
}
}
}
哪里songs
只是歌曲的数组,我想要添加。 songs
中的歌曲是非持久对象(现在还没有),但list
已经在Realm中保留。
我在这里发现了很多关于stackoverflow的问题,它们似乎提出了同样的问题,但是他们的所有解决方案都是在将写入事务包装在一个写入事务中,我已经在做,正如你所看到的。
我也曾尝试以下操作:
try! realm!.write {
list.RLMsongs.appendContentsOf(songs)
}
正在发生的事情是,如果我在控制台输入po list.RLMsongs
的新曲是存在的,它看起来很棒,但如果我进入po list
其RLMsongs
属性缺失新歌。两者如何都是真实的?它似乎与自己相矛盾,似乎有一些基本的东西我缺少RealmSwift。
它看起来像是更新内存中的列表,但实际上并没有提交给Realm。因此,我想也许写块没有正确提交并将其包装在do catch
中,但catch从未运行,因此写入事务应成功提交。
编辑:
另外,我注意到,我能够取消写交易,并没有给我一个错误。我认为这可能是这里发生的事情的线索。是否有可能列表被认为是非持续的,因此即使列表的内容(歌曲)是持久对象,它也不会在领域中正确更新?
真棒,这是有道理的。谢谢回答。现在为什么它实际上没有出现在领域?我使用Realm浏览器来查看领域中的内容,并且它不会将歌曲链接到播放列表,甚至不会将歌曲添加到播放列表中。 –
如果您分享示范项目的示例项目,我很乐意为您提供更多帮助。 – jpsim
我真的不能在另一个项目@jpsim中复制这个,但是我发现了一些关于写入事务的新信息(编辑后的最后一段)。这是否有助于为您解决这个问题? –