为 TableView 单元格设置值时出现致命错误
Fatal error when setting value for TableView Cell
我在尝试将值传递给文本标签时遇到此错误
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value:
准备好有关此的 SO 线程后,我尝试了以下但没有成功:
- 打印出
photo
中的每个值并且值是正确的而不是 nil
- 删除并重新连接了奥特莱斯
- 创建了一个虚拟值
username1Label.text = "test"
和同样的错误
这是代码的简化版本:
class EventFeedCell: UITableViewCell {
@IBOutlet weak var username1Label: UILabel!
@IBOutlet weak var date1Label: UILabel!
@IBOutlet weak var photoId1Label: UILabel!
func setPhoto(_ photo:Photo) {
username1Label.text = photo.byUsername //I get the fatal error here
date1Label.text = photo.date
photoId1Label.text = photo.postId
}}
和 Photo
对象
class Photo {
var postId = ""
var byId = ""
var byUsername = ""
var date = ""
var url = ""
var eventId = ""
}
cellForRowAt
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//Get a event feed photo cell
let cell = tableView.dequeueReusableCell(withIdentifier: EventFeedCell.eventFeedPhotoTableCell, for: indexPath) as! EventFeedCell
//Get the photo for this row
let photo = photos[indexPath.row]
//Set the details for the cell
cell.setPhoto(photo)
return cell
}
我还能尝试什么?这是另一个有效的 TableView 单元格的精确副本(因此我在标签名称中添加了一个 1
以确保它们是唯一的)
单元格初始化后,您的标签和其他 UI 组件可能为零,因此只有当您的 UI 组件(标签等)初始化时,您才必须设置一个值,否则不要设置。在访问文本属性之前只需添加 ?
。
这是 setPhoto(:)
方法的修改版本。
func setPhoto(_ photo:Photo) {
username1Label?.text = photo.byUsername
date1Label?.text = photo.date
photoId1Label?.text = photo.postId
}
需要注意的一件事是,如果您的 photoModel 属性是可选的,您必须先解包它们,然后再尝试访问。以下是您的 setPhoto(:)
方法的另一个版本,仅当您的 photoModel 具有可选属性时。
func setPhoto(_ photo:Photo) {
// Optionally unwrap your photo properties.
gaurd let byUserName = photo.byUsername,
let date = photo.date,
let postId = photo.postId else {return}
// Safe to proceed if all your values are set in photoModel
username1Label?.text = byUserName
date1Label?.text = date
photoId1Label?.text = postId
}
我在尝试将值传递给文本标签时遇到此错误
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value:
准备好有关此的 SO 线程后,我尝试了以下但没有成功:
- 打印出
photo
中的每个值并且值是正确的而不是nil
- 删除并重新连接了奥特莱斯
- 创建了一个虚拟值
username1Label.text = "test"
和同样的错误
这是代码的简化版本:
class EventFeedCell: UITableViewCell {
@IBOutlet weak var username1Label: UILabel!
@IBOutlet weak var date1Label: UILabel!
@IBOutlet weak var photoId1Label: UILabel!
func setPhoto(_ photo:Photo) {
username1Label.text = photo.byUsername //I get the fatal error here
date1Label.text = photo.date
photoId1Label.text = photo.postId
}}
和 Photo
对象
class Photo {
var postId = ""
var byId = ""
var byUsername = ""
var date = ""
var url = ""
var eventId = ""
}
cellForRowAt
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//Get a event feed photo cell
let cell = tableView.dequeueReusableCell(withIdentifier: EventFeedCell.eventFeedPhotoTableCell, for: indexPath) as! EventFeedCell
//Get the photo for this row
let photo = photos[indexPath.row]
//Set the details for the cell
cell.setPhoto(photo)
return cell
}
我还能尝试什么?这是另一个有效的 TableView 单元格的精确副本(因此我在标签名称中添加了一个 1
以确保它们是唯一的)
单元格初始化后,您的标签和其他 UI 组件可能为零,因此只有当您的 UI 组件(标签等)初始化时,您才必须设置一个值,否则不要设置。在访问文本属性之前只需添加 ?
。
这是 setPhoto(:)
方法的修改版本。
func setPhoto(_ photo:Photo) {
username1Label?.text = photo.byUsername
date1Label?.text = photo.date
photoId1Label?.text = photo.postId
}
需要注意的一件事是,如果您的 photoModel 属性是可选的,您必须先解包它们,然后再尝试访问。以下是您的 setPhoto(:)
方法的另一个版本,仅当您的 photoModel 具有可选属性时。
func setPhoto(_ photo:Photo) {
// Optionally unwrap your photo properties.
gaurd let byUserName = photo.byUsername,
let date = photo.date,
let postId = photo.postId else {return}
// Safe to proceed if all your values are set in photoModel
username1Label?.text = byUserName
date1Label?.text = date
photoId1Label?.text = postId
}