2016-09-13 14 views
0

Firebaseでエントリを正常に更新できます。コンソール上に表示されますが、テーブルビューでは表示されません。私のアプリを再起動すると、変更内容が表示されますが、すぐに表示することができます。Firebaseで値を更新した後にテーブルビューを更新する

私のアプローチは、 "ChildChanged"通知の下で、できるだけ早くテーブルビューを読み込む配列を編集することです。

ref.observeEventType(.ChildChanged, withBlock: { (snapshot) in 

     print("One of the entries were changed so we're reloading the table view") 

     if let firstname = snapshot.value?.objectForKey("firstname"), lastname = snapshot.value?.objectForKey("lastname") 
     { 
      let fullname = "\(firstname) \(lastname)" 

      names[I_Need_This_Index] = fullname 
      dispatch_async(dispatch_get_main_queue()) 
      { 
       self.tableView.reloadData() 
      } 
     } 

    }, withCancelBlock: nil) 

あなたが見ることができるように、私はすでに私はとテーブルビューを更新する、編集された値である「フルネーム」の値を持っているために、私はちょうど、私が必要なもののインデックスを検索する必要があります。

どうすればいいですか?

答えて

0

変更された子のキーを使用してインデックスをルックアップする必要があります。したがって、すべての値を受け取った時点で、すべての子のキーをテーブルビューセルのインデックスにマップするように、辞書を最初に設定することができます。

編集: 古い値自体が必要な場合は、最初の変更スナップショットを自分で取得する必要があります。

+0

私はおそらく何かのように思えます。ただし、私のスナップショットの値は新しく更新された値ですが、古い値を取得しようとしています –

+0

古い値は変更スナップショットには含まれていません。ドキュメント(https://firebase.google.com/docs/reference/ios/firebasedatabase/interface_f_i_r_data_snapshot)をご覧ください。 必要に応じて、古い値を自分で取得する必要があります。別の考え方は、最初のスナップショットをテーブルビューモデルとして使用して、すべての情報(キー、古い値など)を適所に置くことです。 –

+0

ええと...私はそれについてやってみたい? –

関連する問題