xcode - 如何快速修复 EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP, subcode=0x0)

标签 xcode swift

我正在制作图像库,让我能够从我制作的 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/

相关文章:

objective-c - NSTextView 文本对齐

xcode - 如何在我的 GameViewController.swift 中加载不同于 GameScene.swift 的 spritekit 文件?

iOS - Firebase Storage 尝试在 didFinishLaunchingWithOptions 之前初始化

ios - SwiftUI 预览不显示(无错误)

ios - UITableView中的UIDatePicker,保证Visibility

ios - 无法在 xcode 中调整 View 大小

ios - 断点在 Xcode7.3 中不起作用

ios - 将数据发送到另一个 View Controller

ios - Xcode 9 - iOS 11 设备日志私有(private)

ios - 无法使用谓词作为字符串从 coreData 中获取?