나는 그렇게 / posts / id / (post info)와 같은 내 소셜 네트워크에 대한 게시 개체로 이어지는 일련의 키를 가지고 있습니다.
게시물을로드 할 때 observeSingleEventOfType(.Value)
메소드를 사용하여 / posts / 0을로드 한 다음 / posts / 1 등을로드합니다 .
나는 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에서 키 번호 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"
} ]