2016-05-25 6 views
8

У меня есть этот Firebase данные:Swift IOS: Firebase Paging

Firebase Data

Я хочу, чтобы запросить данные posts через пагинацией. В настоящее время мой код преобразования этого JS код Swift код

let postsRef = self.rootDatabaseReference.child("development/posts") 
postsRef.queryOrderedByChild("createdAt").queryStartingAtValue((page - 1) * count).queryLimitedToFirst(UInt(count)).observeSingleEventOfType(.Value, withBlock: { snapshot in 
.... 

    }) 

При доступе, эти данные page: 1, count: 1. Я могу получить данные для «posts.a», но когда я пытаюсь получить доступ к page: 2, count: 1, доход по-прежнему «posts.a»

Что мне здесь не хватает?

+0

Там своя логика проблема. Для страницы: 1, count: 1, запрос начинается с 0 и возвращает 1 сообщение. Для страницы: 2, счет: 1, запрос начинается с 1 и возвращает 1 сообщение. Оба основаны на узле createdAt, который имеет значения, которые являются как более, чем 1, поэтому он только вернет первое сообщение. – Jay

ответ

11

Предполагая, что вы используете или будете использовать childByAutoId() при нажатии данных на Firebase, вы можете использовать queryOrderedByKey(), чтобы заказать данные в хронологическом порядке. Doc here.

Уникальный ключ основан на отметке времени, поэтому элементы списка будут автоматически упорядочены в хронологическом порядке.

Чтобы начать поиск по определенному ключу, вам необходимо добавить свой запрос с помощью queryStartingAtValue(_:).

Пример использования:

var count = numberOfItemsPerPage 

var query ref.queryOrderedByKey() 

if startKey != nil { 
    query = query.queryStartingAtValue(startKey) 
    count += 1 
} 

query.queryLimitedToFirst(UInt(count)).observeSingleEventOfType(.Value, withBlock: { snapshot in 
    guard var children = snapshot.children.allObjects as? [FIRDataSnapshot] else { 
    // Handle error 
    return 
    } 

    if startKey != nil && !children.isEmpty { 
    children.removeFirst() 
    } 

    // Do something with children 
}) 
+0

Как насчет по убыванию? Сначала иметь самые новые данные? – KutakMir

+0

@ KutakMir Я думаю, что использование: 'queryEndingAtValue' с' queryLimitedToLast' –

+0

@ KutakMir Я думаю, что @levantAJ прав. Вы можете использовать эти методы, но ключ, который вы будете передавать, должен быть другим. Вместо использования ключа последнего элемента, возвращаемого Firebase, вы будете использовать ключ первого элемента. Также вместо 'removeFirst()' используйте 'removeLast()'. Я не могу проверить это сейчас, поэтому вы должны попробовать это для себя. :) – timominous

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