7

在这段代码中,我添加了程序化 VC:

@IBAction func addPerson(_ sender: UIBarButtonItem) {
        let controller = CNContactPickerViewController()
        controller.delegate = self
        navigationController?.present(controller, animated: true, completion: nil)
    }

在这里,当我单击联系人时,我会使用另一个 VC(将信息显示到单元格中,然后我想为电话/电子邮件打一个复选框以在我的第一个 VC 中显示)

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
        let vc = EditContactViewController()
        self.navigationController?.pushViewController(vc, animated: true)

我为下一个单元格创建了一个类,当我在 tableView cellForRowAtIndexPath 中执行此操作时,我将标识符设置为情节提要中的单元格

let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as? ConfigCell

return cell!

这给了我:

fatal error: unexpectedly found nil while unwrapping an Optional value

我也试过 withIdentifier,forIndexPath 它说:

2016-11-12 01:35:28.626 iEvents3 [2637:47714] *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法使用标识符单元格出列单元格 - 必须为标识符或连接故事板中的原型单元'

我删除了重用标识符并将其重新放回去,清理了应用程序,重新启动,一切。

感谢您的时间!

4

7 回答 7

6

确保没有“!” 登录接口插座连接

在此处输入图像描述

于 2018-01-04T09:07:45.817 回答
6

这可能有几个原因:

  1. 如果您有UITableViewCellin 控制器本身,请检查重用标识符是否设置为"cell"

  2. 如果你有一个单独.xibUITableViewCell,那么

    viewDidLoad()a)在控制器的表格视图中注册单元格的 .nib

    self.tableView.register(UINib(nibName:"CustomTableViewCell"), forCellWithReuseIdentifier: "cell")
    

    .nib仅当您确定设置了outletof时才注册table view。否则,如果outletiftable view仍然是nil,它将不会注册.nib您的单元格。

    b) 检查重用标识符是否设置为"cell"

于 2016-11-12T16:03:36.463 回答
3

即使您没有单元格的 xib,您也可能需要注册它:

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
于 2018-05-16T09:23:14.027 回答
1

你有那个单元格作为xib吗?您是否将单元格添加到表格视图中?如果是这种情况,试试这个

@IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
self.tableView.register(UINib(nibName: "ConfigCell",bundle: nil), forCellReuseIdentifier: "cell")
}
于 2016-11-11T23:43:07.760 回答
0

当单元格展开时,它会崩溃应用程序

func tableView(_ tableView: SLExpandableTableView!, willExpandSection 部分: UInt, 动画: Bool) {

}

func tableView(_ tableView: SLExpandableTableView!, didExpandSection section: UInt, animated: Bool)
{
    let indexPath = IndexPath(row: 0, section: Int(section))
    let cell: SLExpandableHeaderCell = (tableView.cellForRow(at: indexPath) as! SLExpandableHeaderCell)

    cell.empProfImage?.image = UIImage(named: "upArrowGrey.png")

    //        let imgCategorySymbol: UIImageView = (cell.viewWithTag(5030) as! UIImageView)
    //        imgCategorySymbol.image = UIImage(named: "upArrowGrey.png")

    for i in 0..<arrCategoriesServices.count
    {
        if !selectedSectionIndex.contains("\(i)") && i != Int(section) {

            tableView.collapseSection(i, animated: true)
        }
    }
}

func tableView(_ tableView: SLExpandableTableView!, willCollapseSection section: UInt, animated: Bool) {
    let indexPath = IndexPath(row: 0, section: Int(section))

    let cell: SLExpandableHeaderCell = (tblExpandableView.cellForRow(at: indexPath) as! SLExpandableHeaderCell)
    cell.empProfImage?.image = UIImage(named: "downArrowGrey.png")

    //        let imgCategorysymbol: UIImageView? = (cell.viewWithTag(5030) as! UIImageView)
    //        imgCategorysymbol?.image = UIImage(named: "downArrowGrey.png")
}

func tableView(_ tableView: SLExpandableTableView, canChangeSection section: Int) -> Bool {
    if collapsingSection != section {
        return true
    }
    else {
        return false
    }
}

func tableView(_ tableView: SLExpandableTableView!, didCollapseSection section: UInt, animated: Bool) {

}

func tableView(_ tableView: SLExpandableTableView, canExpandSection section: Int) -> Bool
{
    return true
}


func tableView(_ tableView: SLExpandableTableView!, needsToDownloadDataForExpandableSection section: Int) -> Bool
{
    return false
}

func tableView(_ tableView: SLExpandableTableView!, expandingCellForSection section: Int) -> UITableViewCell
{
    var cell: SLExpandableHeaderCell!

    if cell == nil
    {
        cell = tblExpandableView.dequeueReusableCell(withIdentifier: headerCell) as! SLExpandableHeaderCell
    }


    let label = UILabel()
    label.frame = CGRect(x: CGFloat(10), y: CGFloat(10), width: CGFloat(100), height: CGFloat(25))
    cell.addSubview(label)


    cell.empProfImage?.image = UIImage(named: "downArrowGrey.png")
    cell?.selectionStyle = .none

    let cat: CategoryModel = (arrCategory[section] as! CategoryModel)
    label.text = cat.categoryName
    print("Expanding table for categoty : \(cat.categoryName)")
  //  cell.textLabel?.frame = frame
  //  cell?.textLabel?.text = cat.categoryName

// Util.setCategoryDe​​tailFontColorAndSize(label: (cell?.textLabel!)!, labelText: cat.categoryName) Util.setCategoryDe​​tailFontColorAndSize(label: label, labelText: cat.categoryName) cell?.textLabel?.backgroundColor = UIColor.clear

    return cell!
}

public func tableView(_ tableView: SLExpandableTableView!, downloadDataForExpandableSection section: Int)
{

}
于 2017-09-16T06:21:16.320 回答
0

就我而言,这是一个愚蠢的错误,只是.xib名称的错误打印,但是我花了太多时间才找到它,因为名称很长而且很难看到错误,所以我正在寻找其他原因。现在看起来很明显..但狗屎发生了:)

如果是您的情况,我希望节省您的时间。

于 2019-11-14T10:51:31.117 回答
0

对我来说,TableView 单元格设置为静态内容而不是动态,因为我希望它根据我的集合生成 X 个单元格。一个很好的线索是,我在 Xcode 的层次结构概览面板中的表格视图单元格上方看到了一个带有蓝色立方体的奇怪标题文本。

这是将单元格设置为动态的视觉效果。 显示动态选择的 xcode 屏幕截图

于 2020-11-25T13:54:57.590 回答