2016-12-13 1 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 записей для чата. В приведенном выше коде я просто извлекаю записи из таблицы «Чат», фильтруя чат как «ПОДПИСАННЫЙ ПОЛЬЗОВАТЕЛЬ И ПОЛЬЗОВАТЕЛЮ». а также, если я перечислил все записи (например, более 150 чатов) для конкретного чата, затем прокрутка записей из tableview застряла или зависала некоторое время. Поэтому, пожалуйста, дайте некоторое представление о том, как ограничить последние 30 записей и прекратить вешать табличное представление. Заранее спасибо

+0

Вы читаете https://realm.io/docs/swift/latest/#limiting-results? – EpicPandaForce

+0

Да, я читал, что, фактически, ограничиваясь, если у меня есть всего 60 записей, у меня есть предел 30 последних значений от 31-й записи до 60-й записи. проблема заключается в том, как дать начальное значение, потому что я знал, что последняя запись - 60 –

ответ

0

Как я писал in the Realm documentation, потому что объекты Realm Results лениво загружены, неважно, запрашиваете ли вы все объекты, а затем просто загружаете те, которые вам нужны.

Если вы хотите выровнять его до вида таблицы, вы можете создать вспомогательный метод, который отображает последние 30 результатов в диапазон индексов 0-30, что было бы проще передать прямо в источник данных табличного представления :

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

Если вы уже успешно запросили и начали доступ к этим объектам (т.е. запрос сам не зависнуть), я не знаю, почему вид таблицы будет висеть после факта. Вы можете попробовать запустить Time Profiler в Instruments, чтобы отслеживать, что именно заставляет основной поток блокироваться.

Смежные вопросы