gpt4 book ai didi

ios - 快速展开可选值时意外发现 nil

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:10 25 4
gpt4 key购买 nike

我从 Swift 收到一条错误消息“Unexpectedly found nil while unwrapping an Optional”,其中包含以下类。错误发生在行上:

(cell.contentView.viewWithTag(1) as UILabel).text = object["firstName"] as? String

我有一个带有 2 个标记为 1 和 2 的 UILabel 的自定义单元类, socket 已设置

    import UIKit
import Foundation

class dictionaryTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{

var objects = NSMutableArray()
var dataArray = [["firstName":"Debasis","lastName":"Das","email":"debasis_das@knowstack.com"],["firstName":"John","lastName":"Doe","email":"jdoe@knowstack.com"],["firstName":"Jane","lastName":"Doe","email":"janedoe@knowstack.com"],["firstName":"Mary","lastName":"Jane","email":"mjane@knowstack.com"]]

@IBOutlet
var tableView: UITableView!

var items: [String] = ["We", "Heart", "Swift"]

override func viewDidLoad() {
super.viewDidLoad()
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count;//self.items.count;
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
//cell.textLabel?.text = self.items[indexPath.row]
//return cell
let cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath) as UITableViewCell
let object = dataArray[indexPath.row] as NSDictionary
(cell.contentView.viewWithTag(1) as UILabel).text = object["firstName"] as? String
(cell.contentView.viewWithTag(2) as UILabel).text = object["lastName"] as? String
return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

println("You selected cell #\(indexPath.row)!")

}

}

最佳答案

如果你想使用自定义单元格布局,我建议

  1. 子类UITableViewCell:

    //  CustomTableViewCell.swift

    import UIKit

    class CustomTableViewCell: UITableViewCell {

    @IBOutlet weak var firstNameLabel: UILabel!
    @IBOutlet weak var lastNameLabel: UILabel!

    }
  2. 在 Storyboard中创建表格 View 。将单元格原型(prototype)添加到 Storyboard 中的 TableView 。设计该单元格原型(prototype)(添加您想要的任何标签)。

  3. 将单元格原型(prototype)的 Storyboard标识符指定为您想要的任何内容(在您的示例中为 MyCell)。

    enter image description here

  4. 指定单元格原型(prototype)的基类,在此示例中,CustomTableViewCell:

    enter image description here

  5. 在单元格原型(prototype)和 UITableViewCell 子类之间连接 IBOutlet 引用。

    enter image description here

    请注意 IBOutlet 引用左侧的实心圆点。这表明 socket 已正确连接。

  6. 在您的数据源中实现 cellForRowAtIndexPath,例如在 Swift 3 中:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! CustomTableViewCell

    let person = dataArray[indexPath.row]

    cell.firstNameLabel.text = person["firstName"]
    cell.lastNameLabel.text = person["lastName"]

    return cell
    }

    或者在 Swift 2 中:

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath) as! CustomTableViewCell

    let person = dataArray[indexPath.row]

    cell.firstNameLabel.text = person["firstName"]
    cell.lastNameLabel.text = person["lastName"]

    return cell
    }
  7. 请注意,如果使用单元格原型(prototype),您不想viewDidLoad 中调用registerClass。 Storyboard 将自动为您使用重复使用的标识符注册您的自定义类(由于您在第 3 步和第 4 步中所做的操作)。

关于ios - 快速展开可选值时意外发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28393701/

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