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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage