2017-03-17 4 views
0

同じ問題で問題が発生しました - Firebaseデータを取得してユーザープロファイルを作成しています。nullを返すスナップショット

スナップが情報を引き出しているかどうかを確認するためにログに出力していますが、それはFirebaseデータベースからも情報を引き出すものではありません。

Code : 
import UIKit 
import Firebase 
import SDWebImage 

class UserViewController: UIViewController { 

    @IBOutlet weak var userImage: UIImageView! 
    @IBOutlet weak var userName: UILabel! 

    var databaseRef: FIRDatabaseReference! 
    var storageRef: FIRStorageReference! 




    override func viewDidLoad() { 
     super.viewDidLoad() 

     databaseRef = FIRDatabase.database().reference() 
     storageRef = FIRStorage.storage().reference() 



     loadProfileData() 
    } 



    func loadProfileData(){ 
     FIRDatabase.database().reference().child("users").child(FIRAuth.auth()!.currentUser!.uid).observeSingleEvent(of: .value, with: { (snapshot) in 
      print(snapshot) 
      if snapshot.exists(){ 
       let values = snapshot.value as! NSDictionary 
       if let profileImageURL = values["urlToImage"] as? String { 
        self.userImage.sd_setImage(with: URL(string: profileImageURL)) 
       } 
       self.userName.text = values["full name"] as? String 

      } 

     }) 
    } 

ログイン:

2017-03-17 13:49:51.366564 avenir-design-app[14469:925571] [MC] Reading from private effective user settings. 
2017-03-17 13:50:05.885290 avenir-design-app[14469:925211] [Common] _BSMachError: port 690f; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND" 
2017-03-17 13:50:05.885899 avenir-design-app[14469:925211] [Common] _BSMachError: port 690f; (os/kern) invalid name (0xf) "Unable to deallocate send right" 
Snap (XH1ju3X9QzfqZJFC4XP98IW4nn32) <null> 

データベース:

{ 
    "user" : { 
    "XH1ju3X9QzfqZJFC4XP98IW4nn32" : { 
     "full name" : "Bob Jones", 
     "uid" : "XH1ju3X9QzfqZJFC4XP98IW4nn32", 
     "urlToImage" : "https://firebasestorage.googleapis.com/v0/b/avenir-design.appspot.com/o/users%2FXH1ju3X9QzfqZJFC4XP98IW4nn32.jpg?alt=media&token=4b92e6ac-6a4b-4bc8-825e-b674cc4372a4" 
    }, 
+0

しようとした場合snapshot.hasChildren snapshot.children { でスナップ用(){ ノードをとしてスナップ=許可すれば:ここ

は、更新されたコードですか? FIRDataSnapshot { print(node.value) } } } ' –

+0

@ EICaptainv2.0これを関数に追加しましたが、何も出力しません。 –

+0

@ EICaptainv2.0ちょうどきれいにして再建し、これが私に 'Snap(XH1ju3X9QzfqZJFC4XP98IW4nn32)'を与える​​ものです –

答えて

0

私は辞書にキャストしなければならなかったし、次に右の子に必ず私の子供の基準点を作る[私は、ユーザーを入れ、それは本当にユーザーです]。しかし、最も重要な部分は辞書にキャスティングしていました。 `

import UIKit 
import Firebase 
import SDWebImage 

class UserViewController: UIViewController { 

@IBOutlet weak var userImage: UIImageView! 
@IBOutlet weak var userName: UILabel! 

var databaseRef: FIRDatabaseReference! 
var storageRef: FIRStorageReference! 

//let user = [User]() 


override func viewDidLoad() { 
    super.viewDidLoad() 

    databaseRef = FIRDatabase.database().reference() 
    storageRef = FIRStorage.storage().reference() 

    //loadProfile() 
    setupProfile() 


    //loadProfileData() 
} 

func setupProfile(){ 
    if FIRAuth.auth()?.currentUser?.uid == nil { 
     //logout() 
    } else { 
     let uid = FIRAuth.auth()?.currentUser?.uid 
     databaseRef.child("user").child(uid!).observeSingleEvent(of: .value, with: {(snapshot) in 
      if let dict = snapshot.value as? [String : AnyObject] { 
       print(dict) 
       self.userName.text = dict["full name"] as? String 
       if let profileImage = dict["urlToImage"] as? String { 
        let url = URL(string: profileImage) 
        URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in 
         if error != nil { 
          print(error!) 
          return 
         } 
         DispatchQueue.main.async { 
          self.userImage?.image = UIImage(data: data!) 
         } 

        }).resume() 
       } 
      } 

     }) 
    } 
}