作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作图像库,让我能够从我制作的 Collection View 中选择多个图像当我玩得开心时,我的代码避免是好的,但是当我按下选择按钮时,这个错误发生了“EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP, subcode=0x0)”
这是选择按钮的代码
@IBAction func Select(sender: AnyObject) {
var ckeck = AssetCell() as? AssetCell
ckeck!.CheckMarkView1.hidden = false // here it shows an error which is "Thread 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)"
}
我有包含 CheckMarkView1 的 Assetcell 类
最佳答案
当你说 AssetCell() 为? AssetCell
这意味着你的 ckeck
是一个 Optional,这再次意味着它可以是某物,也可以是 nil(无)。
当你在下一行说 ckeck!
时,这意味着你告诉编译器只处理 ckeck
的值,你不关心它是否是否为零。这几乎总是一个坏主意,因为您刚刚通过艰难的方式发现了这一点。
更好的方法是使用if let
语法来解包或使用guard
语法。
所以你可以说:
if let ckeck = ckeck {
ckeck!.CheckMarkView1.hidden = false
}
或者你可以说:
guard let ckeck = ckeck else { return }
ckeck!.CheckMarkView1.hidden = false
这样你就可以确保只在 ckeck
确实有值(value)时才开始使用它。
话虽如此,您实际创建 ckeck
的方式看起来有点奇怪:
var ckeck = AssetCell() as? AssetCell
现在我不知道细节,但你不能直接说
let ckeck = AssetCell()
最后...这个问题已经以各种形式被问过很多次了。我知道当您遇到错误并且不太了解发生了什么时会令人沮丧,但下次您应该开始搜索 EXC_BAD_INSTRUCTION
等。这应该返回很多答案来帮助您解决问题,或者至少帮助您了解正在发生的事情。对不起:)
关于xcode - 如何快速修复 EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP, subcode=0x0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37178591/
我是一名优秀的程序员,十分优秀!