MLKit文本检测异常-[Not A Type _cfTypeID]:消息发送到已释放实例0x106623e20

时间:2018-11-02 00:35:54

标签: ios swift firebase-mlkit

我正在尝试创建一个应用,该应用使用MLKit的文本检测功能来检测设备相机拍摄的照片中的文本。下面是我的photoOutput方法中的代码,以及它调用的方法的代码:

func photoOutput(_ output: AVCapturePhotoOutput,
                 didFinishProcessingPhoto photo: AVCapturePhoto,
                 error: Error?) {
    print("worked")
    PHPhotoLibrary.shared().performChanges( {
        let creationRequest = PHAssetCreationRequest.forAsset()
        creationRequest.addResource(with: PHAssetResourceType.photo, data: photo.fileDataRepresentation()!, options: nil)
    }, completionHandler: nil)

    let cgImage = photo.cgImageRepresentation()!.takeRetainedValue()
    print(cgImage)
    let orientation = photo.metadata[kCGImagePropertyOrientation as String] as! NSNumber
    let uiOrientation = UIImage.Orientation(rawValue: orientation.intValue)!
    let image = UIImage(cgImage: cgImage, scale: 1, orientation: uiOrientation)

    self.runTextRecognition(with: image)
}

func runTextRecognition(with image: UIImage) {
    let visionImage = VisionImage(image: image)
    textRecognizer.process(visionImage) { features, error in
        self.processResult(from: features, error: error)
    }
}

func processResult(from text: VisionText?, error: Error?) {
    guard error == nil, let text = text else {
        print("oops")
        return
    }

    print(text.text)

}

每当我运行该应用程序并拍照时,一切都会正常运行,直到行textRecognizer.process(visionImage)。控制台消息是-[Not A Type _cfTypeID]:发送到已释放实例0x106623e20的消息。

任何帮助或建议将不胜感激!请让我知道是否需要提供更多信息。

1 个答案:

答案 0 :(得分:1)

没关系,我已解决此问题!我应该一直使用.takeUnretainedValue()而不是.takeRetainedValue(),因为ARC在使用它之前为我释放了CGImage对象。