Как выполнить запрос разбивки на страницы в SDK Firebase?

Модель Firebase

Это моя модель.

messagesRef = Firebase(url: "https://"+CONSTANTS.FirebaseDB+".firebaseio.com/messages/1:1000") messagesRef.queryLimitedToLast(5).observeEventType(FEventType.ChildAdded, withBlock: { (snapshot) in self.message_list.append(snapshot) // it works. }); }); 

Мой код работает – он получает последние 5 сообщений (8-12).

Однако, что, если у меня есть функция, запросите следующие 5 сообщений (2-6)? С началом и смещением. Как я могу запросить это?

3 Solutions collect form web for “Как выполнить запрос разбивки на страницы в SDK Firebase?”

 messagesRef = Firebase(url: "https://"+CONSTANTS.FirebaseDB+".firebaseio.com/messages/1:1000")messagesRef .queryOrderedByKey() .queryStartingAtValue(5) .queryEndingAtValue(10) .observeEventType(FEventType.ChildAdded, withBlock: { (snapshot) in self.message_list.append(snapshot) }); 

Это своего рода выстрел в темноте, но похоже, что он должен работать на основе документации здесь. https://www.firebase.com/docs/ios-api/Classes/Firebase.html#//api/name/queryStartingAtValue :

Потратив слишком много времени, я понял это и вот решение. Это код Objective-C, который вы можете преобразовать в быстрый. Вызовите функцию ниже для целей подкачки.

 - (void)loadMoreMessages { if (!lastMessageKey) { // Loading messages first time [[[msgsReference queryOrderedByKey] queryLimitedToLast:K_MESSAGES_PER_PAGE] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) { if (snapshot.exists) { for (FIRDataSnapshot *child in snapshot.children) { NSMutableDictionary *dict = [child.value mutableCopy]; [dict setObject:child.key forKey:@"id"]; [messages addObject:dict]; } lastMessageKey = [[snapshot.children.allObjects firstObject] key]; NSLog(@"%@", messages); } }]; } else { // Paging started [[[[msgsReference queryOrderedByKey] queryLimitedToLast:K_MESSAGES_PER_PAGE + 1] queryEndingAtValue:lastMessageKey] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) { if (snapshot.exists) { NSInteger count = 0; NSMutableArray *newPage = [NSMutableArray new]; for (FIRDataSnapshot *child in snapshot.children) { // Ignore last object because this is duplicate of last page if (count == snapshot.childrenCount - 1) { break; } count += 1; NSMutableDictionary *dict = [child.value mutableCopy]; [dict setObject:child.key forKey:@"id"]; [newPage addObject:dict]; } lastMessageKey = [[snapshot.children.allObjects firstObject] key]; // Insert new messages at top of old array NSIndexSet *indexes = [NSIndexSet indexSetWithIndexesInRange: NSMakeRange(0, [newPage count])]; [messages insertObjects:newPage atIndexes:indexes]; NSLog(@"%@", messages); } }]; } } 

И вот описание необходимых вам объектов:

 #define K_MESSAGES_PER_PAGE 50 // A macro defining the numbers in one request msgsReference // Firebase database messages node reference I'm also attaching the screenshot of my db structure for make you more clear lastMessageKey // Is a NSString object which store the first key of last page messages // Is a NSMutableArray storing the result 

Удачи!! (у)

введите описание изображения здесь

Swift 3.x

 func fetchEarlierMessages(chatGroupId: String, messageKey: String, completion: @escaping ([Message]?) -> ()) { previousMessageRef = root.child("messages").child(chatGroupId) messageValueHandle = previousMessageRef.queryOrderedByKey().queryLimited(toLast: 10).queryEnding(atValue: messageKey).observe(.value, with: { snapshot in var messages: [Message] = [] for child in snapshot.children.allObjects as! [FIRDataSnapshot] { guard var item = child.value as? [String: AnyObject] else { return } item["message_id"] = child.key as AnyObject if let message = self.parseMessage(snapshot: child) { messages.append(message) } } messages.removeLast() completion(messages) }) } 

Здесь функция parseMessage – это моя настраиваемая функция для преобразования моментального снимка в модель сообщения, вы можете использовать свой собственный. ключ сообщения является ключом самого раннего сообщения, которое вы загрузили при первом вызове firebase.

  • Предупреждение: неуравновешенные вызовы для перехода к началу / концу отображения для QLRemotePreviewContentController
  • cast from для несвязанного типа NSMutableDictionary всегда сбой Предупреждение
  • @IBDesignable view не рисует цвет фона внутри Interface Builder
  • Может ли один .swift-файл в Xcode содержать весь исходный код приложения iOS?
  • Создайте список меню для проката элементов с помощью Xcode
  • Создайте плейлист (начните следующую песню) быстрым
  • Можем ли мы интегрировать код быстрого в приложениях с целью развертывания меньше, чем iOS 7?
  • прикосновение к MKMapView приводит к тому, что штырьки слегка перемещаются
  • Как сгенерировать штрих-код из строки в swift
  • Изменение цвета панели навигации в Swift
  • Swift - выполнить Segue из аннотации карты
  • Interesting Posts

    Ориентация на конкретное устройство в симуляторе iOS с использованием Meteor

    Разбор каждого элемента массива вместе – iOS

    объектно-c методы доступа из пользовательской ячейки

    импорт SDWebImage не удается, несмотря на установку CocoaPod

    Использование тестов интерфейса Xcode для тестирования базового поведения

    Любой способ создания рамки для привязки класса в Objective-C

    Как получить доступ к локализованным строкам для стандартных терминов системы iOS (например, «Избранное», «Ещё …»)?

    Если оператор CGPoint

    Очистка данных анализа после удаления приложения

    Управление воспроизведением Webview программно для видео YouTube в iOS

    Продажа чего-то внутри приложения на iOS

    Изменение порядка в Game Center

    Используя кривую Безье, чтобы нарисовать спираль

    Попытка отклонить UIAlertController с неизвестным ведущим

    Программно имитировать события клавиатуры на iPhone

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.