2017-07-08 8 views
0

私はFirebaseを使用してユーザープロファイル情報を保持しています。あなたはStorage Referenceを聞くことができないので、私はユーザーが自分のプロフィール写真を変更するたびに変更される子供をデータベースに追加しました(無作為に生成されたuuidStringだけですが、Firebaseで実際に変化していることを確認しました。ユーザーが情報を変更するたびに、そのプロファイルを表示しているユーザーが変更を参照するようにして、これをテストしました。子供が変更してもプロファイルの変更はありません。情報の別の部分、私はバイオでそれをテストし、プロファイルは最新のプロフィールPICとともに、更新するコードの半ばデバッグバージョンは以下の通りです:。これまでのところ、私は私の頭のために傷きFirebaseの問題.childChanged in Swift

let ref = DatabaseReference.allUsers.reference() 
    let query = ref.queryOrdered(byChild: "uid").queryEqual(toValue: (user.uid)) 

    query.observe(.childChanged, with: { snapshot in 
     let user = User(dictionary: snapshot.value as! [String : Any]) 
     self.user = user 
     self.bio.text = user.bio 
     self.user?.fullName = user.fullName 
     self.user?.instagram = user.instagram 
     self.user?.facebook = user.facebook 
     self.user?.phone = user.phone 
     self.user?.email = user.email 

    }) 

    //let ref2 = DatabaseReference.users(uid: user.uid).reference() 
    //let query2 = ref2.child("updatePic") 

    query.observe(.childChanged, with: { snapshot in 
     let user = User(dictionary: snapshot.value as! [String : Any]) 

     self.user?.downloadProfilePicture { [weak self] (image, error) in 
      self?.profilePicture.image = image 
      let profilePictureKey = "\(user.uid)-headerImage" 
      self?.cache?.setObject(image, forKey: profilePictureKey) 
     } 
    }) 

私は何が欠けているのか分かりません。基本的には、子供が変わったことを認識していません私の目の前でそれが変わるのを見ているのですが。何か案は?

update:childChangedがトリガーされたときにプロファイル写真が更新されず、同じ写真がダウンロードされている可能性がありますか?この写真を変更するための私の現在のコードです:

extension FIRImage { 
func saveProfileImage(_ userUID: String, _ completion: @escaping (Error?) -> Void) { 
    let resizedImage = image.resized() 
    let imageData = UIImageJPEGRepresentation(resizedImage, 1.0) 

    ref = StorageReference.profileImages.reference().child(userUID) 
    downloadLink = ref.description 

    ref.put(imageData!, metadata: nil) { 
     (metaData, error) in 
     completion(error) 
    } 
    updateProfilePic(userUID) 
    } 
    func updateProfilePic(_ userUID: String) { 
    var randomString = UUID().uuidString 
    let ref = DatabaseReference.users(uid: userUID).reference() 
    ref.child("updatePic").setValue(randomString) 
} 

答えて

0

私のupdateProfilePicをsaveProfileImage関数の補完ブロックに入れる必要がありました。

0

私はこれがあなたの問題の原因である場合は、完全にはわからないが、しかし、あなたは間違いなくこのような構造でユーザーを格納考慮する必要があります。

users: { 
    uid1: { 
    name: "Sudacris" 
    profilePic: "https://www.gravatar.com/avatar/60fa08515b157ef927d885a4217c0f76?s=32&d=identicon&r=PG&f=1" 
    }, 
    uid1: { 
    name: "Frank van Puffelen" 
    profilePic: "https://www.gravatar.com/avatar/12d378e6a9788ab9c94bbafe242b82b4?s=48&d=identicon&r=PG" 
    } 
} 

これにより、クエリーを必要とせずに特定のユーザーを検索することができます。

let ref = DatabaseReference.allUsers.reference() 
let userRef = ref.child(user.uid) 

userRef.observe(.value, with: { snapshot in 
    let user = User(dictionary: snapshot.value as! [String : Any]) 
    ... 
+0

本当に役に立たない。それはあなたが整備士で、私はあなたにVWを持ってきたとしています。そして、あなたは「あなたはおそらくメルセデスを持っているはずです」と言いました。 – Sudacris