Firebaseに送信する情報があります。データを送信したいのですが、そこから最初にデータを取得する必要があります。取得するデータは、ユーザーの入力に基づいています。Swift iOS - ビューの変更後にFirebaseにデータを送信するために使用するviewControllerライフサイクルイベント
Firebaseにいくつかのネストされた非同期呼び出しを既に行っています。データが設定されていることを確認するためにコールが完了するのを待つだけでなく、シーンを離れてデータを取得してバックグラウンドで変更することができるようにするために、仕事。
私はNSNotification
を使用することを考えていましたが、performSegueWithIdentifier
がトリガーされた後です。 notification
のobserver
は、viewWillDisappear
の内部になります。
これは安全ですか?そうでない場合は、何が最良の方法ですか?
コード:
var ref: FIRDatabaseReference!
let uid = FIRAuth.auth()?.currentUser?.uid
let activityIndicator = UIActivityIndicatorView()
override func viewDidLoad() {
super.viewDidLoad()
self.ref = FIRDatabase.database().reference().child(self.uid!)
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(fetchSomeValueFromFBThenUpdateAndResendAnotherValue), name: "FbFetchAndSend", object: nil)
}
@IBAction func buttonPressed(sender: UIButton) {
activityIndicator.startAnimating()
levelTwoRef //send levelTwo data to FB run 1st callback
scoreRef //send score data to FB run 2nd callback
powerRef //send power data to FB run 3rd callback
lifeRef //send life data to FB run Last callback for dispatch_async...
dispatch_async(dispatch_get_main_queue()){
activityIndicator.stopAnimating()
performSegueWithIdentifier....
//Notifier fires after performSegue???
NSNotificationCenter.defaultCenter().postNotificationName("FbFetchAndSend", object: nil)
}
}
func fetchSomeValueFromFBThenUpdateAndResendAnotherValue(){
let paymentRef = ref.child("paymentNode")
paymentRef?.observeSingleEventOfType(.Value, withBlock: {
(snapshot) in
if snapshot.exists(){
if let dict = snapshot.value as? [String:AnyObject]{
let paymentAmount = dict["paymentAmount"] as? String
let updatePayment = [String:AnyObject]()
updatePayment.updateValue(paymentAmount, forKey: "paymentMade")
let updateRef = self.ref.child("updatedNode")
updateRef?.updateChildValues(updatePayments)
}