非常简单的代码:
func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
return 1
}
func tableView(tableView:UITableView!, numberOfRowsInSection section:Int) -> Int {
return 5
}
func tableView(tableView:UITableView!, cellForRowAtIndexPath indexPath:NSIndexPath!) -> UITableViewCell! {
let cell: BookTableViewCell = BookTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "BookCell")
println("ip: \(indexPath.row)")
cell.bookLabel.text = "test"
return cell
}
在cell.bookLabel.text行上我得到了这个:
fatal error: unexpectedly found nil while unwrapping an Optional value
BookTableViewCell的定义如下:
class BookTableViewCell: UITableViewCell {
@IBOutlet var bookLabel: UILabel
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
bookLabel正确地连接在Storyboard的Prototype单元格中。为什么我收到此错误?
答案 0 :(得分:74)
如果您正在使用情节提要,请确保在文件开头没有此行:
self.tableView.registerClass(CustomTableViewCell.self, forCellReuseIdentifier: "customCell")
它将覆盖故事板,因此,故事板中的出口链接将被忽略。
答案 1 :(得分:19)
我收到此错误是因为我没有在自定义单元格的故事板中写入标识符。
还要确保它与您的代码匹配:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("CustomTableCell") as CustomTableCell
...
}
答案 2 :(得分:7)
在代码中创建视图时,其IBOutlet
属性无法正常连接。您需要从dequeueReusableCellWithIdentifier
获取的版本:
let cell = tableView.dequeueReusableCellWithIdentifier("BookCell") as BookTableViewCell
答案 3 :(得分:7)
可能是你在Main.Storyboard中的视图在ViewController文件中丢失了它的IBOutlet引用,只是再次链接它。
答案 4 :(得分:3)
不要忘记注册nib(使用Swift3测试),e。 G。在中覆盖func viewDidLoad():
self.tableView.register(UINib(nibName: "BookTableViewCell", bundle: nil), forCellReuseIdentifier: "BookCell")
答案 5 :(得分:2)
之所以问这个问题很多,是因为它取决于您如何设置表格视图和自定义CellClass。您是在情节提要中还是以编程方式创建表视图?您是否创建自定义.xib单元和自定义单元类?
如果您通过编程方式创建了表格视图并创建了自定义.xib和Cell类,那么这就是 Swift 4 的答案:
in viewDidLoad:
customTable.register(UINib(nibName: "NibName", bundle: nil), forCellReuseIdentifier: "NibNameIdentifier")
in cellforRowat:
let cell = tableView.dequeueReusableCell(withIdentifier: "NibName") as! ClassName
注意:请确保在单元.xib文件中,您在“属性”检查器(“ NibNameIdentifier”)中设置了标识符。
答案 6 :(得分:1)
在我的情况下,这是可拆包的方式:
let cellId:String = "ConverterTableCell"
let cell: ConverterTableViewCell = (tableView.dequeueReusableCellWithIdentifier(cellId)! as? ConverterTableViewCell)!
答案 7 :(得分:1)
迅速5 在同一情节提要中,两个类分别是A类和B类,B类包含tableview出口,当我尝试将A类推到B类时,它崩溃了,并显示tableView出口nil。
在A类中,我像下面的代码一样进行导航。
let classBObj = ClassB()
self.navigationController?.pushViewController(classBObj, animated: true)
然后我意识到自己的错误,并在下面的代码中使用了它,它工作正常。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let classBObj = storyboard.instantiateViewController(withIdentifier: "ClassB") as! ClassB
self.navigationController?.pushViewController(classBObj, animated: true)
答案 8 :(得分:0)
尝试这样做:
let cell = tableView.dequeueReusableCellWithIdentifier("BookCell", forIndexPath: indexPath) as! BookTableViewCell
并且不要忘记在故事板中设置重用标识符
答案 9 :(得分:0)
每当我使用重新使用Identifer 名称而不是自定义类名称时,我都会收到此错误 unifid这些名字为我解决了
答案 10 :(得分:0)
如果我把UITapGestureRecognizer放在故事板上的自定义UITableViewCell中,我会遇到这个错误。(Xcode版本是8.3)。
答案 11 :(得分:0)
在Swift 5中
首先,我尝试使用下面提到的类和标识符将UITableViewCell注册到viewdidload()中,但这对我不起作用。
self.tableView.registerClass(MyCustomTableViewCell.self, forCellReuseIdentifier: "customCell")
解决方案
Then I registered my UITableViewCell using Nib name and it worked for me
使用笔尖名称在viewdidload()中注册单元格
override func viewDidLoad()
{
super.viewDidLoad()
// Do any additional setup after loading the view.
//register your table view cell in Viewdidload() using Nib Name
tableView.register(UINib.init(nibName: "MyCustomTableViewCell", bundle: nil), forCellReuseIdentifier: "customCell")
}
答案 12 :(得分:0)
您需要检查两件事
func viewDidLoad()
{
super.viewDidLoad()
listTableView.register(UINib.init(nibName: "ListProductCell", bundle: nil), forCellReuseIdentifier: "ListProductCell")
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ListProductCell") as! ListProductCell
return cell
}