i have posts table in firebase database following structure:
"posts": { "111" : { "pname" : "abc", "pmessage" : "hello", "porder" : 555 }, "112" : { "pname" : "bcd", "pmessage" : "ello", "porder" : 444 }, "113" : { "pname" : "a", "pmessage" : "ollo", "porder" : 555 }. ..... } there quite few records in posts table. so, have implemented pagination fetch 20 records @ time firebase. have set observeeventtype firdataeventtype.value, listen activity in posts. here code pagination:
/* retrieve current set of posts sorted porder of posts */ func retrievepost(offset: nsnumber, completion: (result: anyobject?, error: nserror?)->()){ // method called viewdidload , fetches 20 records @ first. // later when user scrolls down bottom, called again let postsref = ref.child(kdbpostref) var startingvalue:anyobject? // starting value nil when method called viewdidload offset not set if offset == 0{ startingvalue = nil } else{ startingvalue = offset } // sort records porder fetch offset+1 records self.refhandler = postsref.queryorderedbychild("porder").querystartingatvalue(startingvalue).querylimitedtofirst(kpostlimit + 1).observeeventtype(firdataeventtype.value, withblock: { (snapshot) in // flag setting last record/ 21st offset var flag = 0 var temppost:[post] = [] // iterate on children , add temppost item in snapshot.children { // check offet, last row(21st) offset ; not add last element in main table list flag += 1 if flag == 21 { // row offset self.koffsetkey = item.value?["porder"] as! nsnumber continue } // create post object let post = post(snapshot: item as! firdatasnapshot) // append temppost temppost.append(post) } // return closure completion(result:temppost, error:nil) }) } here setting offset each time method called fetch next 20 records.
now, suppose updated post(by updating pmessage) , update reference handler calling particular method(retrievepost) again. synchronize data, maintaining offsetdict dictionary keep record of offset particular range of data:
offsetdict:[range(0-20): "nil", range(21-40):"444", range(41-60):"666"] therefore when retrievepost called update activity, offset chosen dictionary otherwise offset set normal retrieve activity (self.koffsetkey). query is:
is right approach achieve particular functionality?
now, suppose add more new records posts end service, in case, how
refhandlerhandle fetching new records , display automatically app withoutpull requestkind of thing?
Comments
Post a Comment