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
refhandler
handle fetching new records , display automatically app withoutpull request
kind of thing?
Comments
Post a Comment