首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS -将元素追加到realm中的列表不持久元素

iOS -将元素追加到realm中的列表不持久元素
EN

Stack Overflow用户
提问于 2016-08-05 23:43:41
回答 2查看 740关注 0票数 1

我使用以下代码将一首歌曲添加到我的Playlist对象的列表中:

代码语言:javascript
运行
复制
func addSongsForPlaylist(songs: [Song], list: Playlist) {
    try! realm!.write {
        for song in songs {
            list.RLMsongs.append(song)
        }
    }
}

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

我在stackoverflow上发现了相当多的问题,它们似乎都提出了相同的问题,但他们的所有解决方案都必须将append包装在一个写事务中,正如您所看到的,我已经在这样做了。

我还尝试了以下几种方法:

代码语言:javascript
运行
复制
try! realm!.write {
    list.RLMsongs.appendContentsOf(songs)
}

发生的情况是,如果我在控制台中输入po list.RLMsongs,新歌曲就在那里,它看起来很棒,但是如果我输入po list,它的RLMsongs属性将丢失新歌曲。怎么可能两者都是真的呢?它似乎自相矛盾,似乎有一些基本的东西,我错过了关于RealmSwift。

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

编辑:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-10 13:41:51

事实证明,我的问题是我必须从realm...somehow重新获取播放列表,当播放列表传递到函数中时,它在realm中不被视为有效的持久化对象。(即使我有其他更新函数,它们的工作方式与更新其他属性相同,而不是将对象附加到歌曲列表中,这些更新函数工作得很好)

我唯一的猜测是,与追加到持久化对象内部的列表有关的事情以某种方式不同地工作,并且列表必须在本地范围内显式获取,而不只是作为函数参数传递。然而,在这一点上我可能是错的。我只知道我就是这么做的。

票数 0
EN

Stack Overflow用户

发布于 2016-08-06 03:00:44

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38793128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档