в поле поиска ошибка потока 1: EXC_BAD_INSTRUCTION (код=EXC_I386_INVOP, подкод=0x0)

#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) представление объекта элемента с корневым представлением. И, если вы этого еще не сделали, вам нужно задать имя пера, необходимое в инспекторе атрибутов.