本网站上有很多问题,其他问题解决了让Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
尝试在自定义表格视图单元格中设置界面元素的问题。
如何在设置界面元素时阻止界面元素为空?
我完成了我的作业并查看了这些相关问题的答案。
我已经确定我没有在viewDidLoad中注册该类,因为我正在使用UITableViewController。
在Main.storyboard文件中正确引用了UITableViewController。
UITableViewController中的单元格被赋予了正确的reuseIdentifier和类。
我对tableView的dequeueReusableCell调用具有正确的标识符,与故事板中的标识符匹配。
我打破了笔尖的出口并重新连接了它们。
我正在设置一个UITableViewController,“FindTableViewController。”
class FindTableViewController: UITableViewController {
var services = Fetch().getServices()
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
/*Sections & rows defined here*/
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Monk", for:indexPath) as! Monk
let service = services[indexPath.row]
cell.set(service)
return cell
}
}
在另一个文件中,我定义了自定义单元格Monk。
import UIKit
class Monk: UITableViewCell {
@IBOutlet weak var titleImage: UIImageView!
//other outlets defined here
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
}
func set(_ service:Service) {
if let imgv = self.titleImage {
imgv.image = service.image
} else {
print(self.titleImage)
}
self.titleLabel.text = service.title
/*other elements set here*/
}
}
我有一种感觉,我确实做了一些事情,真的愚蠢。
我已将自定义类名设置为Monk,并将单元标识符设置为Monk,因为我不希望这种混淆成为问题的根源,并且使名称不同并不能解决问题。< / p>
我甚至在Service对象中打印了它们,它们与预期的匹配。
if let imgv = self.titleImage {
imgv.image = service.image
} else {
print(self.titleImage)
}
打印“nil”并在下一行抛出错误
self.titleLabel.text = service.title
我还将nib的标识符和类设置为“Monk”。
答案 0 :(得分:1)
这很简单。
如果您正在为您的手机使用自定义NIB,那么您需要注册它。
viewDidLoad中的类似内容:
let myNib = UINib(nibName: "MonkCell", bundle: nil)
tableView.register(myNib, forCellReuseIdentifier: "Monk")
如果您选择直接在视图控制器的故事板中布置单元格,则不需要这样做。