/ posts / id /(投稿情報)のような私のソーシャルネットワークの投稿オブジェクトにつながるキーの配列があります
投稿をロードするとき、/ posts / 0をロードし、次に/ posts / 1などをobserveSingleEventOfType(.Value)
メソッドを使用してロードします。
私lazyTableView
は一度に30をロードするためにを使用しますが、それはかなり遅いです。JSONツリーのデータを再構成する必要がある場合でも、クエリメソッドの1つを使用する方法、またはそれを高速化する別の方法はありますか?
私は自分のアプリを再実装した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からキー番号iの値を取得します。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"
} ]