#swift #xcode #exc-bad-instruction
Вопрос:
в поле поиска, если я напишу в нем, это выдаст мне эту ошибку:
Поток 1: EXC_BAD_INSTRUCTION (код=EXC_I386_INVOP, подкод=0x0)
Если я введу запятую или цифру (чтобы результата не было), приложение работает, но если я введу букву (а затем найду результат), приложение аварийно завершит работу.
override func updateControllerViews(_ animated: Bool) {
super.updateControllerViews(animated)
if textFieldSearch.text == "" {
containerButtons.isHidden = false
containerCollectionView.isHidden = true
imageDeletSearch.image = NSImage.init(named: "menu_header_cerca")
buttonDeleteSearch.isEnabled = false
} else {
containerButtons.isHidden = true
containerCollectionView.isHidden = false
imageDeletSearch.image = NSImage.init(named: "searchoff")
buttonDeleteSearch.isEnabled = true
updateDataSource()
}
collectionView.reloadData()
}
func updateDataSource() {
dataSource = DeviceSearchKeywords.filteredKeywords(byString: textFieldSearch.text)
}
extension DeviceSearchKeywords {
static func filteredKeywords(byString string: String?) -> [String : DeviceType] {
guard let string = string else {
return [:]
}
let cleanString = StringUtility.cleaning(string).lowercased()
var filteredKeyword: [String : DeviceType] = [:]
for keyword in mainDeviceKeywords {
if keyword.lowercased().contains(cleanString) {
filteredKeyword[keyword] = .deviceMain
}
}
for keyword in importDeviceKeywords {
if keyword.lowercased().contains(cleanString) {
filteredKeyword[keyword] = .deviceImport
}
}
for keyword in exportDeviceKeywords {
if keyword.lowercased().contains(cleanString) {
filteredKeyword[keyword] = .deviceExport
}
}
return filteredKeyword
}
}
Ответ №1:
EXC_BAD_INSTRUCTION
означает, что у вас есть неопределенная инструкция, вставленная в код, и она обнаружена во время выполнения.
Вы можете иметь либо:
- Сбой принудительного приведения (
as!
), но в коде, который вы опубликовали, нет доказательств - Массив за пределами границ
- попытка принудительно развернуть (
!
) необязательное свойство с нулем
Попробуйте выполнить отладку кода, активируя точки останова исключений, если вы еще этого не сделали!
Комментарии:
1. то, что вы написали, я уже знал, но я не знаю, как это исправить
2. да, Просмотр темы 4: точка останова 1.3 и 0x7fff6c7db0f8 < 0>: pushq %rbp
3. Эта ошибка не помогает решить вашу проблему, вам необходимо опубликовать полный код, связанный с этим, и строку ошибки
4. Я опубликовал его в начале поста
5. Вы должны связать (внутри элемента ячейки .xib) представление объекта элемента с корневым представлением. И, если вы этого еще не сделали, вам нужно задать имя пера, необходимое в инспекторе атрибутов.