出乎意料地发现nil但是print显示有效的字符串

时间:2017-06-30 15:22:27

标签: swift

我正在尝试设置一个Image和两个标签文本:

cell.ogImageView.sd_setImage(with: URL(string: post.ogImageURL))
cell.titleLabel.text = post.title
cell.urlLabel.text = post.url

如果我在此之前打印出字符串:

print(post.ogImageURL)
print(post.title)
print(post.url)

我得到一个有效的字符串,以及错误:

enter image description here

评论sd_setImage...也会为titleurl提供相同的错误。

问题:这里发生了什么?由于字符串很好,我猜URL是否在这里返回nil?但是为什么我的标题和网址也会出错,尽管它们都很好?

Cell的类:

class LinksCell: MGSwipeTableCell {

    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var urlLabel: UILabel!
    @IBOutlet weak var ogImageView: UIImageView!
}

我填充它们的viewDidLoad()

override func viewDidLoad() {
        super.viewDidLoad()
linksTableView.register(LinksCell.self, forCellReuseIdentifier: "linksCellident")

        dataSource = FUITableViewDataSource.init(query: getQuery()) { (tableView, indexPath, snap) -> MGSwipeTableCell in
            let cell = tableView.dequeueReusableCell(withIdentifier: "linksCellident", for: indexPath) as! LinksCell

            guard let post = LinksPost.init(snapshot: snap) else { return cell }
            print(post.ogImageURL)
            print(post.title)
            print(post.url)
            cell.ogImageView.sd_setImage(with: URL(string: post.ogImageURL))
            cell.titleLabel.text = post.title
            cell.urlLabel.text = post.url

            return cell
    }
    dataSource?.bind(to: linksTableView)
    linksTableView.delegate = self
}

“LinksPost”类:

class LinksPost: NSObject {

    var url: String
    var title: String
    var ogImageURL: String

    init(url: String, title: String, ogImageURL: String) {
        self.url = url
        self.title = title
        self.ogImageURL = ogImageURL
    }

    init?(snapshot: DataSnapshot) {
        guard let dict = snapshot.value as? [String: String] else { return nil }
        guard let url  = dict["url"]  else { return nil }
        guard let title = dict["ogTitle"] else { return nil }
        guard let ogImageURL = dict["ogImageURL"] else { return nil }

        print(ogImageURL)
        self.url = url
        self.title = title
        self.ogImageURL = ogImageURL
    }

    convenience override init() {
        self.init(url: "", title: "", ogImageURL: "")
    }
}

调试变量也会显示有效的字符串:

enter image description here

调试cell的内容: enter image description here

2 个答案:

答案 0 :(得分:1)

如果你删除这一行,似乎一切都有效:

linksTableView.register(...)

非常不熟悉iOS开发,所以请耐心等待。 (也许专家可以插话?)我认为问题是这已经通过你的故事板中的原型内容设置了,并且在这里再次注册基本上撤消了设置的出口。您最终得到nilogImageViewtitleLabel的{​​{1}}值。

答案 1 :(得分:-1)

我不是100%确定,但你的tableView.dataSource是否正确链接?你的手机没有?在FUITableViewDataSource的回调中的每个步骤之后尝试断点,并查看导致崩溃的行。