【问题标题】:RealmSwift limiting and fetching last 30 records into tableviewRealmSwift 限制和获取最后 30 条记录到 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 的想法。提前致谢

【问题讨论】:

  • 是的,我读到了,实际上,如果我总共有 60 条记录,那么我限制了从第 31 条记录到第 60 条记录的最后 30 条记录。问题是如何给出初始值,因为我知道最后一条记录是 60

标签: swift3 realm


【解决方案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,以准确追踪导致主线程被阻塞的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2015-04-29
    • 2016-09-06
    • 2012-02-13
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多