学习Swift 4和AVFoundation并在拍摄照片时遇到错误。按钮已被点击,抛出'Thread 1: EXC_BAD_ACCESS (code=1, address=0x596bbeb8)'
而不是导航我到预览视图控制器以显示刚刚捕获的图像。
(很高兴提供更多代码,只是试图提出我认为可能与保持尽可能短的问题相关的内容:D)
在我的ViewController.swift中:
当拍摄照片'按钮被点击,它称为takepicture()函数。
func takePicture() {
let settings = AVCapturePhotoSettings()
cameraCaptureOutput?.capturePhoto(with: settings, delegate: self)
}
然后代表:
extension ViewController : AVCapturePhotoCaptureDelegate {
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
if let unwrappedError = error {
print(unwrappedError.localizedDescription)
} else {
let imageCaptured = photo.cgImageRepresentation()!.takeRetainedValue()
let finalImage = UIImage(cgImage: imageCaptured)
displayCapturedPhoto(capturedPhoto: finalImage)
}
}
}
displayCapturedPhoto()
func:
func displayCapturedPhoto(capturedPhoto : UIImage) {
let imagePreviewViewController = storyboard?.instantiateViewController(withIdentifier: "imagePreviewViewController") as! imagePreviewViewController
imagePreviewViewController.capturedImage = capturedPhoto
navigationController?.pushViewController(imagePreviewViewController, animated: true)
}
在我的imagePreviewViewController.swift中:
var capturedImage : UIImage?
@IBOutlet weak var capturedImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
capturedImageView.image = capturedImage
// Do any additional setup after loading the view.
}
Thread 1: EXC_BAD_ACCESS (code=1, address=0x596bbeb8)
capturedImageView.image = capturedImage
有人能指出我在哪里可能出错吗?
答案 0 :(得分:0)
AVCapturePhoto.cgImageRepresentation()
返回非托管CGImage参考。如果您在takeRetainedValue()
上使用它,则会消耗不平衡的保留,这可能导致它过早发布以及随后的EXC_BAD_ACCESS。尝试使用takeUnretainedValue()
。