RealmSwift限制并将最近30条记录提取到tableview中

时间:2016-12-13 06:14:12

标签: swift3 realm

我是使用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条记录。在上面的代码中,我只是从“聊天”表中获取记录,并将聊天过滤为“签名的用户ID和用户ID”。如果我列出特定聊天的所有记录(例如超过150个聊天对话),那么从tableview向上滚动记录会被卡住或挂起一段时间。所以请介绍一下如何限制最后30条记录并停止挂起tableview。提前致谢

1 个答案:

答案 0 :(得分:1)

就像我写in the Realm documentation一样,因为Realm Results对象是懒惰加载的,如果你查询所有对象然后只是加载你需要的那些对象并不重要。 / p>

如果你想将它排成一个表格视图,你可以创建一个辅助方法,将最后30个结果映射到0-30索引范围,这样更容易直接传递到表格视图'数据来源:

func chat(atIndex index: Integer) -> Chats {
   let mappedIndex = (newChat.count - 30) + index
   return newChat[mappedIndex]
}

如果您已经成功查询并开始访问这些对象(即查询本身并没有挂起),我不确定为什么表视图会在事后挂起。您可以尝试在Instruments中运行Time Profiler,以准确追踪导致主要线程被阻止的原因。