У меня есть массив ключей, которые приводят к публикации объектов для моей социальной сети, например,/posts/id/(информация о публикации)
Когда я загружаю посты, я загружаю /posts/0, а затем /posts/1 и т.д., Используя метод observeSingleEventOfType(.Value)
.
Я использую lazyTableView
для загрузки 30 одновременно, и это довольно медленно. Есть ли способ, которым я могу использовать один из методов запроса или другой способ сделать это быстрее, даже если мне придется реструктурировать данные в моем дереве JSON.
Я прихожу из Parse, повторно внедряю свое приложение, и пока опыт был довольно хорошим. Только одна вещь, на которой я немного застрял. Заранее спасибо за помощь!
РЕДАКТИРОВАТЬ:
func loadNext(i: Int) {
// check if exhists
let ideaPostsRef = Firebase(url: "https://APPURL")
ideaPostsRef.childByAppendingPath(i.description).observeSingleEventOfType(.Value, withBlock: {
(snapshot) in
if i % 29 == 0 && i != 0 && !self.hitNull { return }
// false if nil
// true if not nil
if !(snapshot.value is NSNull) {
let postJSON = snapshot.value as! [String: AnyObject]
print("GOT VALID \(postJSON)")
let post = IdeaPost(message: postJSON["message"] as! String, byUser: postJSON["user"] as! String, withId: i.description)
post.upvotes = postJSON["upvotes"] as! Int
self.ideaPostDataSource.append(post)
self.loadNext(i + 1)
} else {
// doesn't exhist
print("GOT NULL RETURNING AT \(i)")
self.doneLoading = true
self.hitNull = true
return
}
}
}
Эта рекурсивная функция, по сути, запускает получение значения для ключа номер я из firebase. Если это NSNULL, он знает, что это последний возможный пост для загрузки, и никогда не делает снова. Если NSNULL не получен, но i % 29 == 0
он возвращается в качестве базового варианта, поэтому одновременно загружаются только 30 сообщений (индексировано 0). Когда я устанавливаю doneLoading
в true
, tableView.reloadData()
вызывается с помощью наблюдателя свойства.
Вот пример того, как выглядит массив, который я выбираю
"ideaPosts" : [ {
"id" : 0,
"message" : "Test",
"upvotes" : 1,
"user" : "Anonymous"
}, {
"id" : 1,
"message" : "Test2",
"upvotes" : 1,
"user" : "Anonymous"
} ]