Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:tableview中的线程1 exc_bad_指令(代码=exc_i386_invop子代码=0x0)_Ios_Swift_Uitableview - Fatal编程技术网

Ios Swift:tableview中的线程1 exc_bad_指令(代码=exc_i386_invop子代码=0x0)

Ios Swift:tableview中的线程1 exc_bad_指令(代码=exc_i386_invop子代码=0x0),ios,swift,uitableview,Ios,Swift,Uitableview,我正在使用Tableview控制器制作两个原型单元,由于 线程1 exc_bad_指令(代码=exc_i386_invop子代码=0x0) 指向>>>返回单元格!在第一个牢房里 致命错误:在展开可选值时意外发现nil 看起来是因为电话 let cell=tableView.dequeueReusableCellWithIdentifier(“两个”,forIndexPath:indexPath)as!两个 正在将单元格强制向下转换为类型two,返回的对象不是类型two。使用这里主要是说: “将单

我正在使用Tableview控制器制作两个原型单元,由于

线程1 exc_bad_指令(代码=exc_i386_invop子代码=0x0) 指向>>>返回单元格!在第一个牢房里

致命错误:在展开可选值时意外发现nil


看起来是因为电话

let cell=tableView.dequeueReusableCellWithIdentifier(“两个”,forIndexPath:indexPath)as!两个

正在将单元格强制向下转换为类型
two
,返回的对象不是类型
two
。使用
这里主要是说:

“将单元格出列(返回类型AnyObject),然后向下转换为两种类型
two
。我知道如果类型不匹配,向下转换可能会失败,但在这种情况下,我肯定会失败。无需处理错误”


由于强制转换可能失败,因此强制转换将返回可选的。在这种情况下,返回的单元格不能向下转换,因为类型不匹配。检查注册标识符的代码
“two”
,并检查是否注册了正确类型的类(名为
two
的UITableViewCell子类)

如果我可以改进代码:

 let cellID = (indexPath.section == 0) ? "one" : "two"
 if let cell = tableView.dequeueReusableCellWithIdentifier(cellID, forIndexPath: indexPath)
        as? UITableViewCell
     cell.textLabel!.text = (cellID == "one") ? "book" : "not a book"
     return cell
 } 
 else {
     assertionFailure("Unable to dequeue a cell of ID \(cellID)")
     return nil
 }
然后您将获得合理的错误行为。我敢打赌,即使您将类命名为
one
two
,您也忽略了在每个单元原型的属性检查器的故事板中设置它们的“标识符”

你的回答非常错误。您不应该创建大量的表格单元格。这是对桌子的滥用。您应该只使用重用队列中的那些

使用我的代码版本,并在
if let cell
之后设置断点。在调试器中分析对象并查看其实际类型


如果您点击了
断言失败
,您仍然没有在情节提要中正确设置标识符。向我们展示一个屏幕截图来说服我们。

我认为您应该编辑代码:

 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return 2
    }

试着在桌子周围放一个if-let。dequence…,这样你们就可以确保你们实际上有一个原型单元。然后回顾故事板,确保您已经设置了原型单元的标识符。您需要单击原型单元并设置其标识符,或者如果这不是问题所在,那么问题可能是您没有设置单元的类别,因此您需要转到两个单元的标识检查器并设置其自定义是的,我再次检查了两个自定义类。我更改了它给我的名称,无法强制转换类型为“UITableViewCell”(0x10ac14450)的值。我再次检查了标识符“two”及其UITableViewCell子类。很明显,如果
two
不是有效类型,代码不太可能编译。出于好奇,我从中得到了答案,你到底错过了什么?我无法使用你的调试代码我刚开始学习swift我不知道把它放在哪里!如果indexath.row==3{let cell:UITableViewCell=UITableViewCell(style:UITableViewCellStyle.Default,reuseIdentifier:“cell”)作为!TableViewCell.img.image=UIImage(名为:“CJfSS2TW8AQ0CUu.jpg”)返回单元格,则无法识别tableview单元格>>中的imageview我不是说我的代码,我的意思是,既然你从另一个问题中得到了答案,我想你已经准备好了大部分片段,而答案帮助你找到了最后一个片段,那么它是什么呢?(顺便说一句,我的代码只是您的
cellforrowatinexpath
delegate方法的完全替代品)
 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return 2
    }