Como gravar dados no firebase quando offline? Swift3

Em um tableView, tenho uma lista de trabalhos. Esses trabalhos podem ser acessados por vários usuários, portanto, preciso usar o FIRTransaction. Com base no resultado da primeira gravação no FirebaseDatabase, preciso gravar / não gravar em outro caminho no Firebase. O esquema é o seguinte:

//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

Se a conexão à Internet cair antes que o aplicativo cliente receba resposta do servidor firebase, escreva paraCleaners/UID/bookingNumber não será feito. Como posso resolver este 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

questionAnswers(0)

yourAnswerToTheQuestion