2017-03-17 5 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

[I 넣어 사용자, 그러나 그것은 정말로 사용자이다. 그러나 가장 중요한 부분은 사전에 캐스팅하는 것입니다. `

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() 
       } 
      } 

     }) 
    } 
}