2017-10-14 7 views
0

firebaseで配列を更新しようとしています。 Firebaseでアレイの値を更新するか、新しいものを作成する

let array1 : [String] = ["w9pRe7sTj5aUPf3og4vUZ3kVpXs2"] 
firebaseRef.child(playerID).child("friends").setValue(array1) 

が、ユーザーはすでに「友人」の配列、そのオーバーライド新しいと古いデータを持っている場合: は、私はこのような新しい配列を追加することができることを知っています。

アレイが存在する場合、ユーザーが「フレンド」の配列を持たない場合にのみ、新しい配列を作成する方法 新しい値を「追加」するだけです。

おかげ

+0

は、あなたのfirebaseデシベルの構造を示すことはできますか? – 3stud1ant3

+0

@ 3stud1ant3がスクリーンショット – Felix

+0

を追加しましたあなたは 'updateChildValues'を使ってみましたか? – 3stud1ant3

答えて

0

あなたがここに取ることができる2つの方法があります。

オプション1:

、可変配列に現在の配列を変換し、それにオブジェクトを追加し、再び

NSMutableArray * mutableArray = [NSMutableArray arrayWithArray:firebaseArray]; 
[mutableArray addObject:@"random_id"]; 
firebaseRef.child(playerID).child("friends").setValue([mutableArray copy]); 
を値を設定する注:これは、観察者のchildAddedを呼ぶかもしれない:方法、既存のIDのためとして、よく

オプション2:あなたの配列を設定に変換します。あなたの "友人"リストに複数の類似した文字列を必要としないので、これはあなたの場合の好ましいアプローチです。また、維持管理も容易です。

firebaseRef.child(playerID).child("friends").child("random_id").setValue(YES); 
+0

ありがとう、オプション1はまだデータを上書きします – Felix

0

代わりのこのような使用:この方法でのsetValueを使用

任意の子ノードを含む指定された場所にデータを上書きします。

は...あなたはまだ、オブジェクト全体を書き換えることなく、子を更新することができます。

self.ref.child("users").child(user.uid).setValue(["username": username]) 

あなたのような何かを試みることができます。あなたは、ユーザーが自分のプロファイルを更新できるようにしたい場合は、次のようにユーザー名を更新できます。

self.ref.child("users/(user.uid)/username").setValue(username) 

私は、これはあなたを助けることができると思います。

documentation

+0

ありがとうございます、しかし 'ref.child(" users /(user.uid)/ username " )。setValue(username) ' ' username'と値(username値)という名前のプロパティを作成します – Felix

+0

@Felixあなたの情報を試しましたか? 'ref.child(" players/w9pRe7sTj5aUPf3og4vUZ3kVpXs2/friends ")と同じです:setValue(array1)' –

0

私は新しいものを配列に存在してオーバーライドすることなく、配列に新しい値を「追加」する方法があるとは思いません。

この例を確認してください:

firebaseRef.child(playerID).child("friends").observeSingleEvent(of: .value) { (snapshot) in 
    // check if friends array exist 
    if let friendsArr = snapshot.value as? NSArray{ 
     // add new friend ID to the array 
     let newArr = friendsArr.adding("YOUR NEW FRIEND ID") 
     // update in firebase DB 
     snapshot.ref.setValue(newArr) 
    }else{ // No array exist, save new array 
     firebaseRef.child(playerID).child("friends").setValue(array1) 
    } 
} 
関連する問題