gpt4 book ai didi

Swift 如果您在设置中指定非零格式字典,您的委托(delegate)必须响应选择器 captureOutput :didFinishProcessingPhoto

转载 作者:行者123 更新时间:2023-12-04 07:33:44 26 4
gpt4 key购买 nike

我在下面使用的代码应该拍摄一张照片,然后将图像转换为 base64 以便将其发送到服务器。该代码可以拍摄照片,将其转换为base64,然后将其上传到我的服务器,但已停止工作。我曾尝试使用其他堆栈溢出帖子来解决此问题,但它对我不起作用。感谢您提前回复!
错误

Thread 1: Exception: "*** -[AVCapturePhotoOutput capturePhotoWithSettings:delegate:] If you specify a non-nil format dictionary in your settings, your delegate must respond to the selector captureOutput:didFinishProcessingPhoto:error:, or the deprecated captureOutput:didFinishProcessingPhotoSampleBuffer:previewPhotoSampleBuffer:resolvedSettings:bracketSettings:error:"


代码:
@IBAction func takePhotoButtonPressed(_ sender: Any) {
let settings = AVCapturePhotoSettings()
let previewPixelType = settings.availablePreviewPhotoPixelFormatTypes.first!
let previewFormat = [kCVPixelBufferPixelFormatTypeKey as String: previewPixelType,
kCVPixelBufferWidthKey as String: 160,
kCVPixelBufferHeightKey as String: 160]
settings.previewPhotoFormat = previewFormat
sessionOutput.capturePhoto(with: settings, delegate: self)
}


func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
let imageData = photo.fileDataRepresentation()
let base64String = imageData?.base64EncodedString()
print(base64String!)
}

最佳答案

让我们分解错误消息:


  • Thread 1: Exception:


    从程序的线程 1(可能是主线程)抛出了一个 Objective C 异常。不是特别有趣/有见地。

  • -[AVCapturePhotoOutput capturePhotoWithSettings:delegate:]


    此语法描述了引发异常的 Objective-C 方法。该方法的选择器是 capturePhotoWithSettings:delegate: , 它属于 AVCapturePhotoOutput类(class)。 -表示它是一个实例方法(其中 + 表示它是一个类方法)。

  • If you specify a non-nil format dictionary in your settings ...`


    是这样的,你调用 capturePhoto(with: settings, ...使用不是 nil 的设置.

  • your delegate must respond to the selector captureOutput:didFinishProcessingPhoto:error:


    系统提示您传递了一个不响应选择器 captureOutput:didFinishProcessingPhoto:error: 的委托(delegate)。 (在 Swift 中,该方法被导入为 photoOutput(_:didFinishProcessingPhoto:error:) )。
    也就是说,您的委托(delegate)没有定义任何具有该名称的方法。你决定通过self (无论如何,我不知道没有上下文)作为代表:capturePhoto(..., delegate: self) .
    无论 self 的类型是什么是,它已经符合 AVCapturePhotoCaptureDelegate协议(protocol)(否则这永远不会编译)。但是它没有实现这个方法,这个方法在协议(protocol)中是可选的,但是在这个上下文中是强制性的。

  • or the deprecated captureOutput:didFinishProcessingPhotoSampleBuffer:previewPhotoSampleBuffer:resolvedSettings:bracketSettings:error:


    这只是告诉你,而不是 captureOutput:didFinishProcessingPhoto:error: ,您可以通过实现 captureOutput:didFinishProcessingPhotoSampleBuffer:previewPhotoSampleBuffer:resolvedSettings:bracketSettings:error: 来解决此问题,但由于已弃用,您可能不应该使用它。

  • 所以总而言之,无论 self 的类型如何是,您需要确保它实现了方法 photoOutput(_:didFinishProcessingPhoto:error:)

    关于Swift 如果您在设置中指定非零格式字典,您的委托(delegate)必须响应选择器 captureOutput :didFinishProcessingPhoto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67825283/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com