CloudKit Fehlerbehandlung - Logik wiederholen

Ich möchte eine ausgezeichnete CloudKit-Fehlerbehandlung in meine App integrieren, wie Apple dies von uns verlangt. Ich möchte jetzt einen Datensatz speichern und ändern. Hier ist meine grundlegende Speicherlogik ...

func addNewRecord(managedObj: NSManagedObject) {
  let newRec = managedObj.convertToCkRecord()
  publicDB.saveRecord(newRec, completionHandler: saveHandler)
}

func saveHandler(savedRecord: CKRecord?, error: NSError?) {
  // handle errors here
  if let error = error {

    if error.code == CKErrorCode.NotAuthenticated.rawValue {
      // debug
      print("Not authentricated")
    }
    else if error.code == CKErrorCode.NetworkFailure.rawValue {
      print("Network failure!!")
      if let retryAfterValue = error.userInfo[CKErrorRetryAfterKey] as? NSTimeInterval {

        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(retryAfterValue * Double(NSEC_PER_SEC)))
        dispatch_after(delayTime, dispatch_get_main_queue()) {
          // THIS IS WHERE I GET STUCK, WHERE DO I FIND THE FAILED CKRECORD FOR RETRY?  
          // IS IT IN USERINFO SOMEWHERE?
          //self.saveHandler(savedRecord, error: error)
        }
      }
    }
  }
  else {
    print("Save was a success! \(savedRecord)")
  }

}

Dies scheint, es sollte grundlegend sein, aber jedes Beispiel, das ich darüber sehe, hat nur einen Kommentar//retry oder//handle error, auch in den WWDC-Tutorials, wo die Fehlerbehandlung hingehen soll. Ich möchte wissen, wie ich einen Verweis auf meinen fehlgeschlagenen CKRecord finde. Das Speichern in einer lokalen Variablen scheint aufgrund des Multithreading-Problems nicht zu funktionieren. Ich habe versucht, es zu einer Warteschlange hinzuzufügen, aber andere Threads könnten ebenfalls in diese Warteschlange gelangen, also mache ich mir Sorgen um die Rennbedingungen.