offset .
order , , .
,
"brands": {
"catch" : {
...
...
"pOrder" : 555
},
"etan" : {
...
...
"pOrder" : 444
},
"general" : {
...
...
"pOrder" : 555
}.
.....
}
21 , 20 , , offset, .
, firebase:
func retrievePost(offset: NSNumber, callFlag: Bool, completion: (result: AnyObject?, error: NSError?)->()){
let postsRef = ref.child(kDBPostRef)
var startingValue:AnyObject?
if callFlag{
if offset == 0{
startingValue = nil
}
else{
startingValue = offset
}
} else{
startingValue = self.findOffsetFromArray()
}
self.refHandler = postsRef.queryOrderedByChild("pOrder").queryStartingAtValue(startingValue).queryLimitedToFirst(kPostLimit + 1).observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
var flag = 0
let tempPost = NSMutableSet()
for item in snapshot.children {
flag += 1
if flag == 21 && callFlag == true{
self.kOffset = item.value?["pOrder"] as! NSNumber
self.offSetArray?.append(self.kOffset)
continue
}
let post = Post(snapshot: item as! FIRDataSnapshot)
tempPost.addObject(post)
}
completion(result:tempPost, error:nil)
})
}
updateNewRecords viewDidLoad, 0 20 .
func updateNewRecords(offset:NSNumber, callFlag: Bool){
self.retrievePost(offset,callFlag:callFlag) { (result,error) -> Void in
let oldSet = Set(self.posts)
var unionSet = oldSet.union(result as! Set<Post>)
unionSet = unionSet.union(unionSet)
self.posts = Array(unionSet)
self.postsCopy = self.posts
self.posts.sortInPlace({ $0.pOrder> $1.pOrder})
self.reloadTableData()
}
}
, table view, , updateNewRecords , 20 .
func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
let currentOffset = scrollView.contentOffset.y
let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height
if maximumOffset - currentOffset <= 10.0 {
self.updateNewRecords(self.kOffset, callFlag:true)
}
}
offsetArray , firebase.
, , - , observeEventType, firebase. , offsets. , - , retrievePost offset offsetArray. ( viewDidLoad scrollViewDidEndDragging) kOffset, ( ) offsetArray.
, offset :
func findOffsetFromArray() -> NSNumber{
let idx = self.kClickedRow/20
return self.offSetArray![idx]
}
retrievePost .