2017-02-27 15 views
0

"users"という子の "PhotoGallery"という子の値を更新したいと思います。Firebaseの子値を更新する

このコードを書き換えるにはどうすればよいですか。

func registerDatabase(id: String, url: [String: AnyObject]) { 

     //Create a database reference 
     let userRef = self.databaseRef.child("users").childByAutoId().child(id) 

     userRef.updateChildValues(["PhotoGallery":url]) {(error, ref) in 

      if error != nil{ 
       print("Error registering Firebase database: \(error)") 

       return 
      } 

      print("Successfully stored in DB") 
     } 
    } 

    func removeSpecialCharsFromString(text: String) -> String { 
     let validChars: Set<Character> = Set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890".characters) 

     return String(text.characters.filter{validChars.contains($0)}) 
    } 
+1

あなた*親の子のすべてを参照しているので、私はそれを読みやすくするために別のletとしてphotoRefを残し

users -Yuhusn9asijasd id PhotoGallery: "www.someurl.com" 

ノートの

let userChildRef = self.databaseRef.child("users").childByAutoId() let photoRef = userChildRef.child("id").child("PhotoGallery") photoRef.setValue(url) 

結果* nodeはchildByAutoIdによって作成された子を持つユーザーで、child * id *(文字列)を持つユーザーで、値が文字列* url *のキーであるPhotoGallery子を持ちます。 – Jay

+0

childByAutoId()によって子値を更新することはできません。これにより、新しい子供が作成されます。 – rv7284

+0

現在のユーザーのこの特定の子をどのように更新するのですか? –

答えて

1

setValueは、childByAutoIdを使用してその場で子ノードを作成しているので、これを行います。 userChildRefは今、そのユーザー

let nameRef = userChildRef.child("name") 
nameRef.setValue("Gilligan") 

let hatColorRef = userChildRef.child("hat") 
hatColorRef.setValue("White") 

let shirtColorRef = userChildRef.child("shirt") 
shirtColorRef.setValue("Red") 


users 
    -Yuhusn9asijasd 
     id: 
     PhotoGallery: "www.someurl.com" 
     name: "Gilligan" 
     hat: "White" 
     shirt: "Red" 
+0

ありがとうございますが、現在のユーザーの特定の子は更新されません。自動IDで新しい子を作成するだけです –

+0

@CarstenHøvsgaardあなたの質問に投稿されたコードは、childByAutoIdを使用しています。つまり、何らかの理由で特定のユーザーの子を更新しません。その関数が呼び出されるたびに、新しい子ノードが作成されるため、新しい子ノードが空になるため、更新する必要はありません。 – Jay

+0

あなたの答えに感謝します。 :-) –

関連する問題