推送视图控制器时发现线程错误为零
Posted
技术标签:
【中文标题】推送视图控制器时发现线程错误为零【英文标题】:Thread Error while pushing view controller found nil 【发布时间】:2020-10-22 20:42:24 【问题描述】:我试图在选择单元格时将用户发送到另一个视图控制器。我正在使用 didSelectRowAt 函数来推送视图控制器并用数据填充图像和标签。我遇到了一个崩溃,上面写着:Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value 在pushViewController
行中。我不确定为什么会发生这个错误,因为这在使用另一个视图控制器时工作了一段时间。
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
【问题讨论】:
【参考方案1】:这是在告诉你SvC
为nil,这意味着这条线失败了:
let SvC = storyboard?.instantiateViewController(withIdentifier: "SongsPlayerViewController") as? SongPlayerViewController
我怀疑您没有分配 Storyboard 标识符,或者拼写错误。
当您使用!
时,如SvC!
,您是在告诉系统如果一个值为nil,您希望程序崩溃。这在这种代码中实际上相当有用,因为您可能会发现崩溃并告诉您问题出在哪里更好,而不是安静地什么都不做。但是,您在一个无用的地方应用 !
。如果您希望此代码因错误而崩溃,您应该在分配SvC
时执行此操作,使用as!
而不是as?
。这将消除您后续调用中的所有?.
,并使错误位置更加清晰。
【讨论】:
以上是关于推送视图控制器时发现线程错误为零的主要内容,如果未能解决你的问题,请参考以下文章