2017-06-16 5 views
-1

を変更し、エラーを持っている何の添字のメンバーを持っていません修正されたタイプ 'Any'には添字のメンバー(firebase)はありませんが、クラッシュが発生します。タイプは「任意」Firebaseが、その後、クラッシュを引き起こして少し時代遅れのチュートリアル後

示唆したように、私は以下にコードを変更:

let username = (snapshot.value as? NSDictionary)?["username"] as? String 
let profileImageURL = (snapshot.value as? NSDictionary)?["profileImageURL"] as? String 
let uid = (snapshot.value as? NSDictionary)?["uid"] as? String 

とも:

if let test = snapshot.value! as? [String:Any]{ 

let username = test["username"] as? String 
let profileImageURL = test["profileImageURL"] as? String 
let uid = test["uid"] as? String 

     } 

私はいくつかの関連の質問を通じて検索したが、すべてがちょうどクラッシュの原因となります。

フルコード:

import Foundation 
import UIKit 
import Firebase 
import FirebaseStorage 
import FirebaseDatabase 

struct user { 

    let username : String! 
    let profileImageURL : String! 
    let uid : String! 
} 

class ProfileVC: UITableViewController { 


    var users = [user]() 


    override func viewDidLoad() { 

     let databaseRef = FIRDatabase.database().reference() 


     databaseRef.child("Users").queryOrderedByKey().observe(.childAdded, with: { 
      snapshot in 

      print("snapshot") 

      if let snapshots = snapshot.children.allobjects as? [FIRDataSnapshot] { 
       for snap in snapshots { 
        let username = snapshot.value!["username"] as! String 
        let profileImageURL = snapshot.value!["profileImageURL"] as! String 
        let uid = snapshot.value!["uid"] as! String 
       } 
      } 




      self.users.append(user(username: username, profileImageURL: profileImageURL, uid: uid)) 


      self.tableView.reloadData() 

     }) 

    } 


    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return users.count 

    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 


     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") 

     let imageView = cell?.viewWithTag(1) as! UIImageView 
     imageView.alpha = 0 


     let nameLbl = cell?.viewWithTag(2) as! UILabel 
     nameLbl.alpha = 0 
     nameLbl.text = users[indexPath.row].username 




     let imageData = try? Data(contentsOf: URL(string: self.users[indexPath.row].profileImageURL)!) 
     imageView.image = UIImage(data: imageData!) 
     nameLbl.text = self.users[indexPath.row].username 

     DispatchQueue.main.async(execute: { 
      UIView.animate(withDuration: 0.5, animations: { 

       imageView.alpha = 1 
       nameLbl.alpha = 1 

      }) 
     }) 


     return cell! 
    } 

} 
+0

で スナップショットは、エラーは、このライン上に存在していた? 'ユーザ名= snapshot.valueましょう![「ユーザー名」]として!STRING'は、私はすべての3つ。 –

+0

エラーは、3リットルのそれぞれにあった疑いines –

答えて

0
let databaseRef = FIRDatabase.database().reference() 

databaseRef.child("Users").observe(.value, with: { snapshot in 

print("snapshot") 

if let snapshots = snapshot.children.allobjects as? [FIRDataSnapshot] { 

    for snap in snapshots { 
     let uid = snap.key 
     if let username = snap.value["username"] as? String, let profileImageURL = snap.value["profileImageURL"] as? String { 
     let user = User(username: username, profileImageURL, uid:uid) 
     self.users.append(user) 
     } 
    } 
} 

     self.tableView.reloadData() 

    }) 
+0

どのキーと値ですか? –

+0

このスナップショットは、データベース参照のobserveEventまたはobserveSingleEvent関数からのものであり、完了ハンドラにはスナップショットがあると推定します。[FIRDataSnapshot] –

+0

ありobserveEventが正しいこと –

-1

せdatabaseRef = FIRDatabase.database()参照() databaseRef.child( "ユーザー")queryOrderedByKey()で、(.childAddedを観察。。。: {

 print("snapshot") 

     let udic = snapshot.value as! [String: AnyObject] 

     let username = udic["username"] as! String 
     let profileImageURL = udic["profileImageURL"] as! String 
     let uid = udic["uid"] as! String 

     self.users.append(user(username: username, profileImageURL: profileImageURL, uid: uid)) 

     self.tableView.reloadData() 

    }) 
関連する問題