2016-11-15 75 views
-2

我在尝试在tableview中显示图像时出错。 它正在显示文本,但没有显示任何图像。“类型”值'没有下标成员“在Swift中出错

class ViewController: UITableViewController { 
    var ref: FIRDatabaseReference! 
    var refHandle: UInt! 
    var valueList = [Values]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     ref = FIRDatabase.database().reference() 

     fetchFirebaseData() 
    } 

    func fetchFirebaseData() { 
     refHandle = ref.child("SwiftJson").observe(.childAdded, with: 
      {(snapshot) in 
       if let dictionary = snapshot.value as? [String : AnyObject] { 
        print(dictionary) 

        let value = Values() as AnyObject 

        value.setValuesForKeys(dictionary) 
        self.valueList.append(value as! Values) 

        self.tableView.reloadData() 
       } 
     }) 
    } 

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

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

     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! FTableViewCell 
     let value = valueList[indexPath.row] 

     cell.fTitle.text = value.title 
     let imageUrlString = valueList[indexPath.row]["image"] as! String 
     let imageURL = NSURL(string: imageUrlString) 
     let imageData = NSData(contentsOf: imageURL as! URL) 
     cell.fImage.image = UIImage(data: imageData as! Data) 

     return cell 
    } 
} 

在这里,我解析来自Firebase数据库的数据,并试图在tableview上显示它。

+0

您是否尝试过搜索其中的100个问题之一? – Alexander

+0

究竟哪一行导致错误? – rmaddy

+0

以前这已被问及过多次回答! – matt

回答

0

可能你遇到的问题基本上是你试图访问anyObject类型的下标。在swift中,anyObject没有下标。我不知道你为什么要铸造Values() as AnyObject,但那可能是你为什么得到这个错误。

此外,请尝试更好地看看其他问题。你的问题可能以前曾被问到过。

0

您有:

var valueList = [Values]() 

再后来:

let imageUrlString = valueList[indexPath.row]["image"] as! String 

你的错误信息告诉你什么是错的:

“类型 '价值' 有没有下成员”

valueList[indexPath.row]Value的类型,据我所知,它没有在其类中定义的下标。这正是错误所说的。而你试图调用它的下标:

valueList[indexPath.row]["image"] 

在你的前面,当你分配Value的到阵列的代码看,我猜它会解开为[String : AnyObject]

所以你需要:

if let value = valueList[indexPath.row] as? [String : AnyObject], let imageUrlString = value["image"] as? String { 
    let imageURL = NSURL(string: imageUrlString) 
    //etc, etc... 
} 
相关问题