选择单元格时,我正试图将用户发送到另一个视图控制器。我正在使用didSelectRowAt函数来推动视图控制器,并用数据填充图像和标签。我遇到一个崩溃,上面写着:线程1:致命错误:在打开pushViewController
行中的可选值时意外发现nil。我不确定为什么会发生这个错误,因为使用另一个视图控制器时这个问题已经解决了一段时间。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let songName = songs[indexPath.row].cleanName
let fileURLString = "(filePath)(songName)"
print(fileURLString)
Player.shared.playStream(fileUrl: fileURLString)
let SvC = storyboard?.instantiateViewController(withIdentifier: "SongsPlayerViewController") as? SongPlayerViewController
SvC?.songNames.text = songs[indexPath.row].cleanName
SvC?.songCover.image = UIImage(named: songs[indexPath.row].cover)
self.navigationController?.pushViewController(SvC!, animated: true) // Thread 1 CRASH
}
这告诉您SvC
为零,这意味着此行失败:
let SvC = storyboard?.instantiateViewController(withIdentifier: "SongsPlayerViewController") as? SongPlayerViewController
我怀疑你没有分配情节提要标识符,或者拼错了它。
当您使用!
时,就像在SvC!
中一样,您告诉系统,如果值为零,您希望程序崩溃。这在这种代码中实际上相当有用,因为你可能会发现崩溃并显示问题所在比什么都不做要好。但是,您在一个没有帮助的地方应用!
。如果您希望此代码在出现错误时崩溃,那么应该在分配SvC
时使用as!
而不是as?
。这将在后续调用中消除所有?.
,并使错误位置更加清晰。