Как выполнить запрос разбивки на страницы в 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)? С началом и смещением. Как я могу запросить это?

  • Уведомление об отправке ios с помощью firebase
  • Не удалось загрузить сертификат APN разработки
  • Проблема маркера с Firebase
  • База данных FIREBASE - Хранение уникального ключа для дочернего узла (Swift / IOS)
  • Используйте более одной базы данных Firebase в одном приложении - Swift
  • В Firebase, как я могу запросить самые последние 10 дочерних узлов?
  • FirebaseDatabase web iOS / OSX
  • Как отправить уведомление Firebase Cloud Messaging на устройство iOS без использования Firebase Console?
  • 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.

    Interesting Posts

    Ошибка приложения в UIPopoverPresentationController, но нет явных popovers?

    Основные данные: импортируйте древовидную структуру с помощью элементов поиска или вставки / дублирования

    Как вы управляете пользователями регистрации и входа в приложение iOS?

    Базовый URL RestKit – каталог, следующий за доменным именем

    Ошибка: не удается прочитать свойство «replace» undefined при создании iOS Cordova

    Swift – Как удалить десятичное число из float, если десятичное число равно 0?

    Нумерация версий приложений iOS

    Почему расширение WatchKit вызывает сообщение «Ожидание прикрепить» на фактическом Apple Watch, но не в симуляторе?

    UIView appereance снизу вверх и наоборот (Core Animation)

    Можно ли изменить тип и размер шрифта в UITableView?

    Алгоритм сравнения основных массивов

    Неправильное положение rightBarButtonItem в iOS 10

    Заказ UIMenuItems в пользовательском меню редактирования

    Как поделиться файлами NSData или phasset с помощью Facebook iOS SDK 4.0 FBSDKShareDialog

    Стиль текста UITableViewCell с использованием UIAppearance

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