my function runsqueries
runs 2 different queries. , need these 2 queries completed before can call updateresults
function.
what best approach done? i've tried few different things nothing worked far.
func runsqueries(){ var foundrecords = [ckrecords]() let notified = dispatch_semaphore_create(0) let group = dispatch_group_create() let queue = dispatch_get_global_queue(dispatch_queue_priority_default, 0) dispatch_group_async(group, queue) { // query 1 let predicate1 = nspredicate(format: "userid = %@", user1id) let cloudkitquery1 = ckquery(recordtype: "messages", predicate: predicate1) publicdatabase.performquery(cloudkitquery1, inzonewithid: nil) { (messagerecords: [ckrecord]?, error: nserror?) in if error != nil { print("-> cloudkitloadmessage - userid1 error \(error)") } else { print("-> cloudkitloadmessage - user1done - message") foundrecords.apend(messagerecords[0]) } } // query 2 let predicate2 = nspredicate(format: "userid = %@", user2id) let cloudkitquery2 = ckquery(recordtype: "messages", predicate: predicate2) publicdatabase.performquery(cloudkitquery2, inzonewithid: nil) { (messagerecords: [ckrecord]?, error: nserror?) in if error != nil { print("-> cloudkitloadmessage - userid2 error \(error)") } else { print("-> cloudkitloadmessage - user2done - message") foundrecords.apend(messagerecords[0]) } } } dispatch_group_notify(group, queue) { // block executed when tasks complete print("all tasks complete") dispatch_semaphore_signal(notified) } dispatch_group_wait(group, dispatch_time_forever) dispatch_semaphore_wait(notified, dispatch_time_forever) print("semaphore done") // call updateresults when queries 1 , 2 done updateresults(foundrecords) }
second function
func updateresults(messagerecords: [ckrecord]){ // got both messages }
based ideas from: https://gist.github.com/nbhasin2/735cd80298b5d47852f2
use "dispatch gruop" , put 2 query in 2 different dispatch block.