Error: unrecognized selector sent to instance - Using Camera with OverlayView

Error: unrecognized selector sent to instance - Using Camera with OverlayView

我在使用带有自定义叠加视图的相机时遇到了一些问题。

这是我用来设置和呈现 UIImagePickerController:

的 ViewController
import UIKit

class ViewController: UIViewController, CameraOverlayDelegate {

var imagePicker = UIImagePickerController()

@IBAction func pickImageButton(sender: AnyObject) {

    if UIImagePickerController.isSourceTypeAvailable(
            UIImagePickerControllerSourceType.Camera) {

        imagePicker = UIImagePickerController()
        imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
        imagePicker.showsCameraControls = false

        let myCameraOverlayViewController = CameraOverlayViewController(
            nibName:"CameraOverlayView",
            bundle: nil)
        let customView = myCameraOverlayViewController.view
        customView.frame = imagePicker.view.frame
        imagePicker.cameraOverlayView = customView

        myCameraOverlayViewController.delegate = self
        presentViewController(imagePicker, animated: true, completion: nil)

    } else {
        print("No camera")
    }
}

func didTakePhoto(sender: CameraOverlayViewController) {
    print("Do something ...")
}

自定义叠加视图是一个 *.xib 文件,这是我使用的 CameraOverlayViewController:

import UIKit

protocol CameraOverlayDelegate {
    func didTakePhoto(sender: CameraOverlayViewController)
}

class CameraOverlayViewController: UIViewController {

    var delegate: CameraOverlayDelegate! = nil

    @IBOutlet var myView: UIView!

    @IBAction func takePhotoButton(sender: AnyObject) {
        delegate.didTakePhoto(self)
    }
}

当我 运行 应用程序时,只要我点击应该调用 takePhotoButton(...) 函数的按钮,我就会收到错误消息 (-[UIView takePictureButton:]: unrecognized selector sent to instance)。

我是 Xcode、iOS 开发和 Swift 的新手……以防问题很明显。 ;)

提前致谢。

您的错误意味着您在错误的对象上调用了方法。基本上遇到unrecognized selector...就说明括号里面有问题

takePhotoButton() 有一个 AnyObject 类型的发件人,但它调用 didTakePhoto() 有一个 CameraOverlayViewController 类型的发件人。所以一个按钮调用一个应该由视图控制器调用的方法。现在你看到差异了吗?

正在修复它...我帮不了你。也许别人可以。正如我上面所说,同一个对象必须调用你的两个方法。或者你没有在情节提要中正确分配一些东西。

UIButton@IBAction func takePhotoButton 之间的连接已断开。我通过删除整个 CameraOverlayViewController 并制作一个新的来修复它。

可能会有更简单的方法,但我还没有弄清楚 Xcode 中的所有内容是如何协同工作的。