如何在离线时将数据写入Firebase? Swift3

在tableView中,我有一个作业列表。 这些作业可以被多个用户访问,因此我需要使用FIRTransaction。 根据首次写入FirebaseDatabase的结果,我需要在Firebase中写入/不写入其他path。 模式如下:

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

如果客户端应用程序收到来自Firebase服务器的响应之前互联网连接丢失,则不会写入Cleaners/UID/bookingNumber 。 我怎么解决这个问题?

  @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