2016-08-20 9 views
1

私は、Fireviewの名前でテーブルビューを作成している状況があります。Firebaseのデータを観測してアレイをチェックしていますか?

ビューが読み込まれると、firebaseから必要なすべての名前が取得され、配列にロードされ、その配列からテーブルビューの基底が取得されます。

私は、テキストフィールドにあるものをすべて取り、Firebaseとそのリストの両方にその名前を追加する「追加」ボタンがあります。

私が許可したくないのは、すでに追加した名前を追加することです。

私のような彼らはFirebaseから追加した名前を引っ張っています:ユーザーがロブを入力した場合、それは「名前」ビットが、彼らの場合の下でそれを追加したいので、

users 
    209384092834 
     Names 
      Bob 
      Sue 

をBob/Sueに入力すると、それを再び追加することはできません。

私が見るのは、ユーザーが追加したい名前が配列にあるかどうかを調べることです。ロード時に、またはfirebase上のNames子の下にある名前と照合するかどうかを確認します。

1つを他のものより上に使用することについての強力な議論がありますか?オブザーバーをファイアベースに動かすことは "大きな問題"ですか?私はfirebaseを使っているように感じる。ここではアレイをチェックするよりも安全だと思う。ユーザーのネットがそうであるか、または中断していて、アレイがまだいっぱいではなく、名前を追加して追加するちょうど混乱です。そのようなことが起こるかどうかわからない。

どのような方向性があり、なぜそうなのでしょう?

答えて

3

重要: - 常にこのようなあなたのDBを見て何か作る辞書

を好む、Firebaseデータベースに格納するArraysまたはTuplesを使用しないでください: - 私はあなたが第3の経路を使用することをお勧め

{ users : { 
    209384092834 : { 
    Names: { 
     Bob : True, 
     Sue : True 
      } 
     } 
    } 
} 

を: -

その名前が存在するかどうかを確認するには、その子ノードを参照して、リスト全体ではなくそのパスの特定のスナップを使用してチェックします。

rootRef.child("users").child(timeStamp).child("Names").child(textField.text!).observeEventType(.Value, withBlock: {(snapshotRecieved) in 
if snapshotRecieved.exists() 
{ 
    //Show Alert that user Exists i.e if user is rob/sue in your case 
    }else{ 
    let ref = rootRef.child("users").child(timeStamp).child("Names") 
     ref.observeEventType(.Value, withBlock: {(snapshot) in 

     if let namesDict = snapshot!.value as? NSMutableDictionary{ 

       namesDict.setObject("True",forKey:textField.text!) 
       ref.setValue(namesDict) 
      } 
     }) 
    } 
}) 
関連する問題