gpt4 book ai didi

ios - 如何在 Swift 中传递 Realm 结果?

转载 作者:搜寻专家 更新时间:2023-10-31 22:59:22 24 4
gpt4 key购买 nike

我有一个查询 Realm 数据库并列出其结果的 UITableView View 。查询包含各种过滤器和排序指令。

当用户选择其中一个表格条目时,他们将被带到一个详细 View ,允许他们向左或向右滑动以查看查询的上一个/下一个结果(按照它们在 UITableView 中出现的顺序) .这个详细 View 是一个单独的 ViewController,我目前正在做的是将结果传递给详细 View Controller ,以便它可以在它们之间来回移动。

在引入删除项目的功能之前,这一直很有效。用户可以删除项目,我说用户是因为其他人可以删除项目,并且该删除将传播到所有用户(通过互联网)。现在,如果用户进入详细 View ,并且有人远程删除了一个项目,则分配给详细 View 的结果集现在是不一致的。它不会更新,即使 TableView 中的原始结果确实更新了。

我怀疑发生这种情况是因为变量是按值分配的,而不是按引用分配的。

传递 Realm 对象时,建议做的事情是传递 ID 并再次进行查找,但是当涉及到结果时该怎么办?我是否应该将过滤/排序代码放在 UITableViewController 和详细信息 Controller 都可以访问的地方,以便它们都可以分别提取结果?或者,是否有我忽略的更好方法?

最佳答案

How to pass Realm Results around in Swift?

您可以直接传递Results 实例。它们通过引用传递并自动更新,如 Realm 的 Swift 文档的 Auto-Updating Results 部分所述。

您还可以传递代表查询的 NSPredicate 或查询字符串,以避免 Results 固有的线程限制。

Now, if a user has gone into the detail view, and someone deletes an item remotely, the Results set that was assigned to the detail view is now inconsistent. It doesn't get updated, even though the original Results in the table view does get updated.

除非我误读了您的帖子(可能是这种情况),否则这是不正确的。如果 Results 所在的线程有一个 runloop(在 iOS 的主线程上总是这样),并且它的父 Realm 启用了 autorefresh,那么Results 应始终反射(reflect)其 Realm 的最新状态,该状态将在每次 runloop 迭代之间跨线程自动推进到最新状态。

如果支持 Results 的查询引用的对象之一已被删除,则 Results 将为空,相当于其查询为 FALSEPREDICATE 时的行为。

如果这与您看到的行为不符,那么您可能在 Realm 中发现了错误,在这种情况下,我建议您返回 file a GitHub issue,以便 Realm 人员可以进行调查。

关于ios - 如何在 Swift 中传递 Realm 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39092929/

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