¿Cómo escribir datos en firebase cuando está desconectado? Swift3

En un tableView tengo una lista de trabajos. Varios usuarios pueden acceder a estos trabajos, por lo tanto, necesito usar FIRTransaction. Según el resultado de la primera escritura en FirebaseDatabase, necesito escribir / no escribir en otra ruta en Firebase. El esquema es el siguiente:

//Claim job by - Cleaner
  //cleaner tries to claim booking at Users/UID/cus/bookingNumber
      //if FIRMutableData contains a key ‘claimed’ or key:value “claimed”:true 
        //update at Users/UID/cus/bookingNumber with key:value

    //based on response received write or not to another path
       //write to Cleaners/UID/bookingNumber  
            //key:value

Si la conexión a Internet se cae antes de que la aplicación cliente reciba respuesta del servidor Firebase, escriba aCleaners/UID/bookingNumber No se hará. ¿Como puedó resolver esté problema?

 @IBAction func claimJob(_ sender: Any) {

     dbRef.runTransactionBlock({ (_ currentData:FIRMutableData) -> FIRTransactionResult in

  //if valueRetrieved is nil abort
   guard let val = currentData.value as? [String : AnyObject] else {
    return FIRTransactionResult.abort()
    }
           self.valueRetrieved = val

  guard let uid = FIRAuth.auth()?.currentUser?.uid else {
      print("abort no uid line 80")
         return FIRTransactionResult.abort()
        }
              self.uid = uid


     for key in self.valueRetrieved.keys {

     //unwrap value of 'claimed' key
      guard let keyValue = self.valueRetrieved["Claimed"] as? String else {
        print("abort line 88")
               return FIRTransactionResult.abort()
          }

           //check if key value is true
               if keyValue == "true"{

                //booking already assigned show alert,stop transaction 
                self.alertText = "Booking already taken, please refresh table!"
                  self.alertActionTitle = "OK"
                     self.segueIdentifier = "unwindfromClaimDetailToClaim"
                        self.showAlert()
                  return FIRTransactionResult.abort()

            } else {
              //write the new values to firebase
               let newData =  self.createDictionary()
                 currentData.value = newData
                   return FIRTransactionResult.success(withValue: currentData)

      }//end of else
}//end of for key in self

         return FIRTransactionResult.abort()

    }) {(error, committed,snapshot) in

        if let error = error {
            //display an alert with the error, ask user to try again

         self.alertText = "Booking could not be claimed, please try again."
             self.alertActionTitle = "OK"
               self.segueIdentifier = "unwindfromClaimDetailToClaim"
                  self.showAlert()


            //what if internet connection drops here or client quits app ????????????
        } else if committed == true {

           //write to Cleaners/UID/bookingNumber

            //what if internet connection drops here or client quits app??????
              self.cleanersRef.setValue(snapshot?.value)

        self.alertText = "Booking claimed.Please check your calendar"
            self.alertActionTitle = "OK"
            self.segueIdentifier = "unwindfromClaimDetailToClaim"
              self.showAlert()
        }
    }

}//end of claimJob button

Respuestas a la pregunta(0)

Su respuesta a la pregunta