出列可重复使用的单元格总是崩溃
dequeue reusable cell always crashes
在此代码中,我添加了编程 VC:
@IBAction func addPerson(_ sender: UIBarButtonItem) {
let controller = CNContactPickerViewController()
controller.delegate = self
navigationController?.present(controller, animated: true, completion: nil)
}
在这里,当我点击一个联系人(将信息显示到单元格中,然后我想为 phones/emails 创建一个复选框以在我的第一个 VC)
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
let vc = EditContactViewController()
self.navigationController?.pushViewController(vc, animated: true)
我为下一个单元格创建了一个 class 并且我将标识符设置为故事板中的单元格
当我在 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] *** Terminating app due
to uncaught exception 'NSInternalInconsistencyException', reason:
'unable to dequeue a cell with identifier cell - must register a nib
or a class for the identifier or connect a prototype cell in a
storyboard'
我删除了重用标识符并将其重新放回去,清理了应用程序,重新启动,一切。
感谢您的宝贵时间!
你有那个细胞作为 xib 吗?您是否将单元格添加到 table 视图?如果是这种情况,试试这个
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
self.tableView.register(UINib(nibName: "ConfigCell",bundle: nil), forCellReuseIdentifier: "cell")
}
这可能有几个原因:
如果你的 UITableViewCell
在控制器本身,然后检查 重用标识符 是否设置为 "cell"
如果您的 UITableViewCell
有单独的 .xib
,那么
a) 在控制器 viewDidLoad()
的 table 视图中注册单元格的 .nib
self.tableView.register(UINib(nibName:"CustomTableViewCell"), forCellWithReuseIdentifier: "cell")
只有当您确定 outlet
或 table view
已设置时才注册 .nib
。否则,如果 outlet
if table view
仍然是 nil
,它不会注册你手机的 .nib
。
b) 检查重用标识符是否设置为"cell"
单元格展开时应用程序崩溃
func tableView(_ tableView: SLExpandableTableView!, willExpandSection section: UInt, animated: 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.setCategoryDetailFontColorAndSize(label: (cell?.textLabel!)!, labelText: cat.categoryName)
Util.setCategoryDetailFontColorAndSize(标签:标签,labelText:cat.categoryName)
cell?.textLabel?.backgroundColor = UIColor.clear
return cell!
}
public func tableView(_ tableView: SLExpandableTableView!, downloadDataForExpandableSection section: Int)
{
}
确保没有'!'登录接口插座连接
即使您没有单元格的 xib,您也可能需要注册它:
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
在我的例子中,这是一个愚蠢的错误,只是 .xib 名称中的一个印刷错误,但我花了太多时间才找到它,因为名称很长而且很难看到错误,所以我正在寻找其他原因。
现在看起来很明显..但是狗屎发生了:)
如果您遇到这种情况,我希望能节省您的时间。
对我来说,TableView Cell 设置为静态内容而不是动态内容,因为我希望它根据我的 collection 生成 X 个单元格。一个很好的线索是,我在 Xcode.
的层次结构概览面板中的 Table View Cell 上方看到一个带有蓝色立方体的奇怪 Header 文本
在此代码中,我添加了编程 VC:
@IBAction func addPerson(_ sender: UIBarButtonItem) {
let controller = CNContactPickerViewController()
controller.delegate = self
navigationController?.present(controller, animated: true, completion: nil)
}
在这里,当我点击一个联系人(将信息显示到单元格中,然后我想为 phones/emails 创建一个复选框以在我的第一个 VC)
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
let vc = EditContactViewController()
self.navigationController?.pushViewController(vc, animated: true)
我为下一个单元格创建了一个 class 并且我将标识符设置为故事板中的单元格 当我在 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] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
我删除了重用标识符并将其重新放回去,清理了应用程序,重新启动,一切。
感谢您的宝贵时间!
你有那个细胞作为 xib 吗?您是否将单元格添加到 table 视图?如果是这种情况,试试这个
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
self.tableView.register(UINib(nibName: "ConfigCell",bundle: nil), forCellReuseIdentifier: "cell")
}
这可能有几个原因:
如果你的
UITableViewCell
在控制器本身,然后检查 重用标识符 是否设置为"cell"
如果您的
UITableViewCell
有单独的.xib
,那么a) 在控制器
viewDidLoad()
的 table 视图中注册单元格的 .nibself.tableView.register(UINib(nibName:"CustomTableViewCell"), forCellWithReuseIdentifier: "cell")
只有当您确定
outlet
或table view
已设置时才注册.nib
。否则,如果outlet
iftable view
仍然是nil
,它不会注册你手机的.nib
。b) 检查重用标识符是否设置为
"cell"
单元格展开时应用程序崩溃
func tableView(_ tableView: SLExpandableTableView!, willExpandSection section: UInt, animated: 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.setCategoryDetailFontColorAndSize(label: (cell?.textLabel!)!, labelText: cat.categoryName) Util.setCategoryDetailFontColorAndSize(标签:标签,labelText:cat.categoryName) cell?.textLabel?.backgroundColor = UIColor.clear
return cell!
}
public func tableView(_ tableView: SLExpandableTableView!, downloadDataForExpandableSection section: Int)
{
}
确保没有'!'登录接口插座连接
即使您没有单元格的 xib,您也可能需要注册它:
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
在我的例子中,这是一个愚蠢的错误,只是 .xib 名称中的一个印刷错误,但我花了太多时间才找到它,因为名称很长而且很难看到错误,所以我正在寻找其他原因。 现在看起来很明显..但是狗屎发生了:)
如果您遇到这种情况,我希望能节省您的时间。
对我来说,TableView Cell 设置为静态内容而不是动态内容,因为我希望它根据我的 collection 生成 X 个单元格。一个很好的线索是,我在 Xcode.
的层次结构概览面板中的 Table View Cell 上方看到一个带有蓝色立方体的奇怪 Header 文本