我有UITableView视图,它查询Realm数据库并列出其结果。该查询包含各种过滤器和排序指令。
当用户选择其中一个表条目时,他们会进入详细视图,允许他们向左或向右滑动以查看查询中的上一个/下一个结果(按照它们出现在查询中的相同顺序UITableView的)。这个详细视图是一个单独的ViewController,我目前正在做的是将结果传递给详细视图控制器,以便它可以在它们之间来回移动。
在引入删除项目的能力之前,这很有效。用户可以删除项目,我说用户是因为其他人可以删除项目,并且该删除将传播给所有用户(通过互联网)。现在,如果用户已进入详细信息视图,并且有人远程删除了某个项目,则分配给详细信息视图的结果集现在不一致。即使表格视图中的原始结果确实得到更新,它也不会更新。
我怀疑这是因为变量是按值分配的,而不是通过引用分配的。
当传递Realm Objects时,建议的做法是传递ID并再次进行查找,但是当涉及到结果时该怎么做?我应该将过滤/排序代码放在UITableViewController和详细控制器都可以访问的位置,以便它们可以单独提取结果吗?或者,有没有更好的方法让我无视?
答案 0 :(得分:1)
如何在Swift中传递Realm结果?
您可以直接传递Results
个实例。它们通过引用和自动更新传递,如Realm的Swift文档的Auto-Updating Results部分所述。
您也可以传递代表查询的NSPredicate
或查询字符串,以避免Results
固有的线程限制。
现在,如果用户已进入详细信息视图,并且有人远程删除了某个项目,则分配给详细信息视图的结果集现在不一致。即使表格视图中的原始结果确实得到更新,它也不会更新。
除非我误读你的帖子(可能就是这种情况),否则行为不正确。如果Results
所限定的线程具有runloop(在iOS上的主线程中总是如此),并且其父Realm
已启用autorefresh
,则{{ 1}}应该始终反映其Realm的最新状态,它将在每次runloop迭代之间跨线程自动前进到最新状态。
如果支持Results
的查询引用的其中一个对象已被删除,则Results
将为空,等同于其查询为FALSEPREDICATE
时的行为。
如果这与您所看到的行为不符,那么您可能在Realm中发现了一个错误,在这种情况下我鼓励您file a GitHub issue以便Realm人员可以调查。