【问题标题】:Can't unwrap optional.None when accessing Label in Custom Table Cell - iOs Swift访问自定义表格单元格中的标签时无法打开可选。无 - iOs Swift
【发布时间】:2014-07-15 10:44:11
【问题描述】:

我正在尝试在表格视图的自定义单元格中显示内容。 我从一个主细节应用程序开始,并尝试对其进行自定义。 我使用自定义单元创建了一个新的 xib,并将其连接到一个类并创建了所需的插座。

这是 MasterView 控制器(删除了我没有编辑的所有功能)

import UIKit

class MasterViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        var nipName=UINib(nibName: "SimpleTableCell", bundle:nil)
        self.tableView.registerNib(nipName, forCellReuseIdentifier: "cell")
        self.tableView.registerClass(SimpleTableCell.self, forCellReuseIdentifier: "cell")


        //Create Add Button
        let addButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "insertNewObject:")
        self.navigationItem.rightBarButtonItem = addButton
        loadInitialData()
        tableView.reloadData()

    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var  cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as SimpleTableCell
        cell.loadItem(user:"user1", hoop: "hoop1", post: "There is text in the table")
        return cell
    }
}

这是自定义单元格的类

import UIKit

class SimpleTableCell : UITableViewCell{
    @IBOutlet var userLabel: UILabel
    @IBOutlet var hoopLabel: UILabel
    @IBOutlet var postLabel: UILabel


    func loadItem(#user: String, hoop: String, post: String) {
        userLabel = UILabel()
        hoopLabel = UILabel()
        postLabel = UILabel()
        userLabel.text = user
        hoopLabel.text = hoop
        postLabel.text = post 
    }

}

但是,一旦 userLabel 的文本即将更改,我总是在 loadItem 函数中得到“无法解开 optional.none” - 我没有得到它,因为我在尝试之前初始化了标签添加文本 - 还是我错了?

感谢您的帮助。

【问题讨论】:

  • 无需在设置文本之前初始化标签。如果您有笔尖,则将标签从笔尖连接到插座

标签: ios swift tableview custom-cell


【解决方案1】:

好的,以某种方式安装最新的 xcode beta 并重新创建项目解决了问题... 感谢您的帮助。

【讨论】:

    【解决方案2】:

    在您看来确实加载了您正在为相同的单元格标识符注册同一单元格的类和笔尖。如果您在单元格中有 xib 拖放 3 个标签并将它们连接到 IBOutlets,同时删除行 self.tableView.registerClass(SimpleTableCell.self, forCellReuseIdentifier: "cell")。如果您不使用 xib 创建标签,请在方法 init(style: UITableViewCellStyle, reuseIdentifier: String!) 中设置框架并将它们作为子视图添加到单元格中,同时删除行 self.tableView.registerNib(nipName, forCellReuseIdentifier: "cell")

    【讨论】:

    • 我正在使用 xib - IB Outlets 通过拖放连接。当我删除 self.tableView.registerClass(SimpleTableCell.self, forCellReuseIdentifier: "cell") 结果是另一个错误。 SIGABRT 调用 var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as SimpleTableCell
    • 你在xib中改变了你的单元格的自定义类吗?
    • 是的,单元格被分配给自定义类“SimpleTableCell” - 这在我的第一篇文章中显示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多