gpt4 book ai didi

ios - 展开可选值时为零,但在打印期间该值存在

转载 作者:行者123 更新时间:2023-11-29 01:19:58 27 4
gpt4 key购买 nike

当我想在 m 单元格中设置图片时,我的 TableViewController 出现了一个奇怪的情况。我的细胞类别是:

class TableViewCell

class TableViewCell: UITableViewCell {

/* OUTLETS */

@IBOutlet weak var pictureInRowOutlet: UIImageView!
@IBOutlet weak var postDataOutlet: UILabel!
@IBOutlet weak var titleOutlet: UILabel!

override func awakeFromNib() {
super.awakeFromNib()
// Initialization cod
}

override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}//end of class

class MyTableView

class MyTableView: UITableViewController{

var data:[[String:String]]? // data load from serwer

//code we don't need

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell

// now I want to set up picture in row

let urlAdressPhoto = (data?[indexPath.item]["picture"])!
// here, when I print urlAdressPhote I see correct value as String

cell.pictureInRowOutlet.image = UIImage(data: NSData(contentsOfURL: NSURL(string: urlAdressPhoto)!)!)
// in this moment I recive an information about "unexpectedly found nil while unwrapping an Optional value".

return cell

}

谁能告诉我为什么以及如何解决这个问题?

最佳答案

你强制打开至少 3 个不同的东西。在这一行中,

let urlAdressPhoto = (data?[indexPath.item]["picture"])! 

你强制解包 (data?[indexPath.item]["picture"]) 然后你就走运了。这不是 nil。您赌博并赢了。

也许被你的成功 Revel 了,你决定加倍努力......在这里,你在一个语句中强制解包两次:

UIImage(data: NSData(contentsOfURL: NSURL(string: urlAdressPhoto)!)!)

哇!这意味着如果 NSURL(string: urlAdressPhoto)nil,您的程序将崩溃。或者,如果它不是 nil,但对 NSData 的调用是 nil,那么您的程序将崩溃。

教训是,我不能经常说:为了方便起见,不要使用 !它会破坏您的代码。虽然偶尔有充分的理由使用它,但大多数人使用它是因为他们懒得打开包装。然后他们得到 unexpectedly found nil while unwrapping an Optional value

我敢说这是 Stack Overflow 上最常见的 Swift 相关问题。每天肯定有大约 10 个问题与该错误消息相关,这都是因为人们出于完全超出我理解的原因坚持使用 !

试试这个:

guard let urlAdressPhoto = (data?[indexPath.item]["picture"])
, let url = NSURL(string: urlAdressPhoto)
, let data = NSData(contentsOfURL: url) else {
print("Something failed to unwrap..."); return cell
}

cell.pictureInRowOutlet.image = UImage(data: data)

关于ios - 展开可选值时为零,但在打印期间该值存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34728489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com