首页 > 解决方案 > 在搜索字段错误线程 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

问题描述

如果我在搜索字段中写入,则会出现以下错误:

线程 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
    }
}

标签: swiftxcodeexc-bad-instruction

解决方案


EXC_BAD_INSTRUCTION意味着您在代码中插入了未定义的指令,并且在运行时检测到它。

你可以有一个:

  • 强制强制转换失败(as!)但您发布的代码中没有证据
  • 数组越界
  • 试图强制 unwrap ( !) 一个 nil 可选属性

如果您还没有这样做,请尝试调试激活异常断点的代码!


推荐阅读