swift - Update with new records while Pagination in Firebase, iOS -


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:

  1. is right approach achieve particular functionality?

  2. now, suppose add more new records posts end service, in case, how refhandler handle fetching new records , display automatically app without pull request kind of thing?


Comments