RealmSwift 限制和获取最后 30 条记录到 tableview
Posted
技术标签:
【中文标题】RealmSwift 限制和获取最后 30 条记录到 tableview【英文标题】:RealmSwift limiting and fetching last 30 records into tableview 【发布时间】:2016-12-13 06:14:12 【问题描述】:我是使用 RealmSwift 的新手,我正在使用 swift 3.0 和后端数据库作为 RealmSwift 创建类似聊天的应用程序。虽然将聊天插入到领域中效果很好,但获取记录时的事情
let newChat = uiRealm.objects(Chats.self).filter(
"(from_id == \(signUser!.user_id)
OR from_id == \(selectedList.user_id))
AND (to_id == \(signUser!.user_id)
OR to_id == \(selectedList.user_id))"
).sorted(byProperty: "id", ascending: true)
我不知道如何限制聊天对话的最后 30 条记录。在上面的代码中,我只是从“Chat”表中获取记录,并将聊天过滤为“SIGNED USERID AND TO USERID”。而且,如果我列出了特定聊天的所有记录(例如超过 150 个聊天对话),则从 tableview 向上滚动记录会卡住或挂起一段时间。因此,请提供一些关于如何限制最后 30 条记录并停止挂起 tableview 的想法。提前致谢
【问题讨论】:
你读过realm.io/docs/swift/latest/#limiting-results 吗? 是的,我读到了,实际上,如果我总共有 60 条记录,那么我限制了从第 31 条记录到第 60 条记录的最后 30 条记录。问题是如何给出初始值,因为我知道最后一条记录是 60 【参考方案1】:就像我写的 in the Realm documentation 一样,因为 Realm Results
对象是延迟加载的,如果您查询所有对象然后简单地加载您需要的对象并不重要。
如果要将其排列到表视图中,可以创建一个辅助方法,将最后 30 个结果映射到 0-30 索引范围,然后直接传递到表视图的数据源会更容易:
func chat(atIndex index: Integer) -> Chats
let mappedIndex = (newChat.count - 30) + index
return newChat[mappedIndex]
如果您已经成功查询并开始访问这些对象(即查询本身没有挂起),我不确定为什么表视图会在事后挂起。您可以尝试在 Instruments 中运行 Time Profiler,以准确追踪导致主线程被阻塞的原因。
【讨论】:
以上是关于RealmSwift 限制和获取最后 30 条记录到 tableview的主要内容,如果未能解决你的问题,请参考以下文章