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

  • Новая Firebase: изменение динамического URL базы данных
  • Firebase withCompletionBlock не вызывается, если нет соединения
  • Повторная аутентификация учетных данных пользователя Swift
  • Xcode 8.1 Push Notifications в swift 2.3 с интеграцией firebase не получается?
  • Параметры для события Firebase VIEW_ITEM не отображаются (iOS)
  • Проверьте, существует ли пользователь с firebase 3.0 + swift
  • Может ли Firebase работать в автономном режиме с помощью React Native?
  • Уведомление push-оповещения Firebase IOS не работает, когда приложение закрыто
  • 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

    UIlabel layer.cornerRadius не работает в iOS 7.1

    Как выполнить потоковое воспроизведение файла песни .m4a с помощью AVAudioPlayer?

    Приложение iOS iPad сработало через некоторое время

    могу ли я разделить числовую строку с использованием нескольких разделителей в закрытии Swift?

    setRegion: MKMapView не реагирует

    detailTextLabel на ячейке, созданной в раскадровке с динамическим прототипом, появляется только после выбора ячейки?

    неправильный рекламный идентификатор , но он не

    Как я могу реализовать поведение, как в шаблоне кластера, с помощью apple (NSString и NSCFString)

    iOS – Нет трассировки стека при вызове dispatch_async

    что происходит с информацией NSLog при работе на устройстве?

    Содержит ли ссылка на универсальную статическую библиотеку (устройство / симулятор) код x86 в выпущенном двоичном файле для руки?

    CNContact измененная дата и контакты изменены

    Как создать скругленную прямоугольную метку в Xcode 7 и Swift 2

    фатальная ошибка: не может увеличивать endIndex

    Как создать приложение журнала на iOS 9 и более поздних версиях?

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