如何在Swift中传递Realm Results?

3
我有一个UITableView视图,它查询一个Realm数据库并列出其结果。查询包含各种过滤器和排序指令。
当用户选择表中的一个条目时,他们将进入详细视图,允许他们向左或向右滑动以查看查询结果的上一个/下一个(按照它们在UITableView中出现的顺序)。这个详细视图是一个单独的ViewController,我目前正在做的是将Results传递给详细视图控制器,以便它可以在它们之间来回移动。
这个方法很好用,直到引入了删除项目的功能。用户可以删除项目,而且我说用户,因为其他人可以删除一个项目,这个删除将通过互联网传播给所有用户。现在,如果一个用户进入详细视图,并且有人远程删除了一个项目,分配给详细视图的Results集就不一致了。它没有得到更新,即使原始的Results在表视图中得到了更新。
我怀疑这是因为变量是按值分配而不是按引用分配。
当传递Realm对象时,推荐的做法是传递ID并重新查找,但是对于Results该怎么办呢?我应该将过滤/排序代码放在UITableViewController和详细控制器都可以访问的地方,以便它们可以分别提取结果吗?或者,我忽略了更好的方法吗?
1个回答

1
如何在Swift中传递Realm结果?
您可以直接传递Results实例。它们通过引用传递,并根据Realm的Swift文档中自动更新结果部分的描述进行自动更新。
您还可以传递表示查询的NSPredicate或查询字符串,以避免Results固有的线程限制。
现在,如果用户进入详细视图,并且有人远程删除了一个项目,则分配给详细视图的Results集合现在不一致。即使原始的表视图中的Results得到更新,但它不会得到更新。
除非我误读了您的帖子(这可能是情况),否则它不会正常工作。如果Results所在的线程有运行循环(在iOS上的主线程上始终如此),并且其父Realm启用了autorefresh,则Results应始终反映其Realm的最新状态,该状态将在每个运行循环迭代之间自动向最新状态推进。
如果查询支持Results的一个对象已被删除,则Results将为空,相当于其查询为FALSEPREDICATE时的行为。
如果这与您看到的行为不符,则可能是Realm中的错误,请提交GitHub问题以便Realm开发人员进行调查。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接