2016-05-12 1 views
1

Я создаю библиотеку изображений, которые заставляют меня abel выбирать несколько изображений из коллекции, которую я сделал Когда мне весело, мой код является хорошим, но когда я нажмите кнопку выбора эта ошибка произойдет "EXC_BAD_INSTRUCTION (код = EXC_1386_INVOP, субкодовое = 0x0)"Как исправить EXC_BAD_INSTRUCTION (код = EXC_1386_INVOP, subcode = 0x0) в swift

это выбрать код кнопки

@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

Когда вы говорите, AssetCell() as? AssetCell это означает, что ваш ckeck является необязательным, что опять-таки означает, что он может быть чем-то, или он может быть 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, если он на самом деле имеет значение.

Сказав, что, как вы на самом деле создать ckeck выглядит немного странным:

var ckeck = AssetCell() as? AssetCell 

Теперь я не знаю подробностей, но не могли бы вы сказать

let ckeck = AssetCell() 

И наконец ... этот вопрос задавался много раз уже в различных формах. Я знаю, что это разочаровывает, когда у вас есть ошибка, и вы не совсем понимаете, что происходит, но в следующий раз вы должны начать поиск с EXC_BAD_INSTRUCTION. Это должно вернуть много ответов, чтобы помочь вам решить проблему или, по крайней мере, помочь вам понять, что происходит. Извините :)

Смежные вопросы