This works, and the UI is snappy in the simulator, but since this is my first time really using GCD, I'd just like this code to be reviewed before I start using it everywhere. Note that this is inside a PFQueryTableViewController
.
My function:
func tableRefresh() {
// get quality of service (high level)
let qos = Int(QOS_CLASS_USER_INITIATED.value)
// get global queue
dispatch_async(dispatch_get_global_queue(qos, 0)) { () -> Void in
//execute slow task
self.queryForTable()
// get main queue, do UI update
dispatch_async(dispatch_get_main_queue()) {
self.loadObjects()
}
}
}
My function in action:
@IBAction func done(segue: UIStoryboardSegue) {
let addPersonViewController = segue.sourceViewController as! AddPersonViewController
// If I get a person back from APVC
if let person = addPersonViewController.person {
// If that person has a name
if let name = person.name {
// Note: the reference to current user creates the pointer
let newPerson = Person(name: name, user: PFUser.currentUser()!)
// Save
newPerson.saveInBackgroundWithBlock() { succeeded, error in
if succeeded {
println("\(newPerson) was Saved")
self.tableRefresh()
} else {
if let errorMessage = error?.userInfo?["error"] as? String {
self.showErrorView(error!)
}
}
}
}
}
}