У мене є масив ключів, які ведуть до розміщення об’єктів для моєї соціальної мережі, наприклад so / posts / id / (інформація про публікацію)
Коли я завантажую повідомлення, я завантажую / posts / 0, а потім / posts / 1 тощо, використовуючи observeSingleEventOfType(.Value)
метод.
Я використовую a 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
}
}
}
Ця рекурсивна функція, по суті, запускає отримання значення для ключа номер i з 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"
} ]