如何在swift中修复EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)

时间:2016-05-12 06:11:26

标签: xcode swift

制作图像库让我能够从我制作的集合视图中选择多个图像 当我有趣的时候我的代码避免是好的,但是当我按下选择按钮时会发生此错误" EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 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)"
                                         }

我的Assetcell类包含CheckMarkView1

1 个答案:

答案 0 :(得分:1)

当你说ArrayList<String> a=new ArrayList<String>(); ArrayList<String> b=new ArrayList<String>(); b.addAll(a); 时,这意味着你的LinkedHashSet<String> result=new LinkedHashSet<String>(b); 是一个可选的,这意味着它可以是某种东西,或者它可以是零(无)。

当您在下一行中说AssetCell() as? AssetCell时,这意味着您告诉编译器只处理ckeck的值,并且您不关心它是否为零。这几乎总是一个坏主意,因为你刚刚找到了困难的方法。

更好的方法是使用ckeck!语法来解包或ckeck语法。

所以你可以说:

if let

或者你可以说:

guard

这样,如果它确实有值,你肯定只能开始使用if let ckeck = ckeck { ckeck!.CheckMarkView1.hidden = false }

话虽如此,你实际创建guard let ckeck = ckeck else { return } ckeck!.CheckMarkView1.hidden = false 的方式看起来有点奇怪:

ckeck

现在我不知道细节,但你不能说出来

ckeck

最后......这个问题已经以各种形式被提出了很多次。我知道当你遇到错误并且你不太了解发生的事情时会很沮丧,但是下次你应该开始搜索var ckeck = AssetCell() as? AssetCell 。这应该会返回很多答案来帮助您解决问题,或者至少可以帮助您了解正在发生的事情。对不起:)