集成Google ML Kit相关库后扫码功能触发MLKMissingLocalizerModel异常崩溃求助
我在项目里集成了Google ML Kit的以下库:
pod 'GoogleMLKit/BarcodeScanning', '7.0.0' pod 'GoogleMLKit/ObjectDetection', '7.0.0'
但在运行扫码功能的时候,App突然崩溃了,抛出的错误信息如下:
Terminating app due to uncaught exception 'MLKMissingLocalizerModel', reason: 'Object localizer model is missing.'
First throw call stack:
(0x19cca95ec 0x19a225244 0x19cdf66e0 0x105157c64 0x19a1ff4ec 0x19a20672c 0x19a206514 0x19a2063c...)
嗨,这个问题我之前也踩过坑!其实根源很明确:你虽然只是在调用扫码功能,但因为同时集成了ObjectDetection库,ML Kit会默认尝试加载物体检测的本地模型——而这个模型是需要提前下载到设备上的,你没处理模型下载的逻辑,自然就触发崩溃了。
给你两个针对性的解决思路:
如果完全不需要物体检测功能:直接把
pod 'GoogleMLKit/ObjectDetection', '7.0.0'从Podfile里删掉,执行pod install重新安装依赖就行。这样就彻底切断了物体检测模型的关联,扫码功能就能正常运行了。确实需要保留物体检测功能:那你得在App启动或者使用相关功能前,先处理模型的下载逻辑。可以用ML Kit的模型管理器检查模型是否存在,不存在就触发下载,等下载完成后再使用功能。给你个简单的代码示例:
let modelManager = MLKModelManager.modelManager() let objectDetectionModel = MLKObjectDetectorOptions.default().model if !modelManager.isModelDownloaded(objectDetectionModel) { modelManager.download(objectDetectionModel) { error in if let error = error { // 处理下载失败的情况 print("模型下载失败:\(error.localizedDescription)") } else { // 模型下载完成,此时可以正常使用物体检测和扫码功能 print("模型下载成功") } } }
另外还得检查下你的扫码逻辑里,有没有不小心初始化了ObjectDetector相关的实例——如果误调用了物体检测的代码,也会触发这个错误,要是有的话删掉就行。
备注:内容来源于stack exchange,提问作者Ahmad

