2016-12-13 51 views
0

我是一個使用RealmSwift的新手,我創建的應用程序使用swift 3.0與後端數據庫作爲RealmSwift聊天。同時插入聊天作品好到的境界,但事情時獲取記錄RealmSwift限制和提取最後30條記錄到tableview

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條記錄並停止掛錶的提示。在此先感謝

+0

你看過https://realm.io/docs/swift/latest/#limiting-results嗎? – EpicPandaForce

+0

是的,我讀過,實際上限制如果我有總共60條記錄,那麼我有限制最後30表示從第31條記錄到第60條記錄。問題是如何給出初始值,因爲我知道最後的記錄是60 –

回答

0

就像我寫的in the Realm documentation,因爲領域Results對象是懶惰加載,沒關係,如果你查詢所有的對象,然後加載你需要的。

如果您想將其排成一個表格視圖,您可以創建一個輔助方法,將最近的30個結果映射到0-30個索引範圍,這將更容易直接傳遞到表視圖的數據源:

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

如果您已經成功地查詢,並開始訪問這些對象(即查詢本身沒有掛),我不知道爲什麼表視圖會在事後掛起。您可以嘗試運行Instruments中的時間事件探查器來準確追蹤導致主線程被阻塞的原因。