【发布时间】:2019-10-12 15:03:39
【问题描述】:
我的CollectionView 应该将一个类模型传递给DetailViewController,但是当我点击一个单元格时,我得到了 nil 错误。
致命错误:在隐式展开时意外发现 nil 可选值
CollectionViewController 以编程方式嵌入在TabBarController 上。
收藏夹视图
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return soundArray.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "SoundCell", for: indexPath) as? SoundCell {
let SoundClass = soundArray[indexPath.row]
cell.updateUI(SoundClass: SoundClass)
return cell
} else {
return UICollectionViewCell()
}
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
self.performSegue(withIdentifier: "seguetosound", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "seguetosound" {
if let detailVC = segue.destination as? DetailSecondVC
let sound = sender as? SoundClass {
detailVC.SoundClass = sound
}
}
细节视图控制器
class DetailSecondVC: UIViewController, UIWebViewDelegate {
private var _SoundClass: SoundClass!
var SoundClass: SoundClass {
get {
return _SoundClass
} set {
_SoundClass = newValue
}
}
你知道我在这里缺少什么吗?我用一个简单的白屏测试了 segue,它可以工作,但是当我尝试传递数据时,它失败了。
【问题讨论】:
-
显示 cellForItem 方法
-
好的!我更新了它
-
非常有意义。你说
sender: self。然后你说let sound = sender as? SoundClass。所以如果self不是一个SoundClass,sound将是nil。但是self不是 SoundClass;它是一个 CollectionViewController。 -
请不要给变量名以大写字母开头。那是错误的。并且不要调用变量
SoundClass甚至soundClass。它是一个变量,而不是一个类。而且你不能“通过一门课”。 -
@matt 那么谁应该是发件人?我更改了变量名,但这并没有解决问题;)
标签: ios swift uiviewcontroller segue uistoryboardsegue