Обработка ошибок CloudKit - повторите логику

Я хочу добавить отличную обработку ошибок CloudKit в свое приложение, как того хочет Apple. Я хочу сохранить и изменить запись прямо сейчас. Вот моя основная логика сохранения ...

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)")
  }

}

Кажется, это должно быть просто, но каждый пример, который я вижу по этому поводу, просто имеет комментарий//retry или же//handle errorВ том числе в руководствах WWDC, где должна идти обработка ошибок. Я хочу знать, как найти ссылку на мой сбойный CKRecord? Сохранение его в локальной переменной выглядит так, как будто это не сработает из-за проблемы многопоточности. Я попытался добавить его в очередь, но другие потоки также могли попасть в эту очередь, поэтому я беспокоюсь о состоянии гонки.