错误:无法识别的选择器发送到实例 - 使用Camera with OverlayView

时间:2016-05-04 18:12:36

标签: ios swift uiimagepickercontroller overlay

我在使用自定义叠加视图的相机时遇到了一些麻烦。

这是我用来设置和呈现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)
    }
}

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

我对Xcode,iOS开发和Swift都很陌生......以防问题显而易见。 ;)

提前致谢。

2 个答案:

答案 0 :(得分:0)

您的错误意味着您正在错误的对象上调用该方法。基本上每当遇到unrecognized selector...时,就意味着你在括号内有问题。

takePhotoButton()的发件人类型为AnyObject,但会调用didTakePhoto(),其发件人类型为CameraOverlayViewController。因此,按钮调用应由视图控制器调用的方法。现在你看到了这种差异吗?

修复它...我无法帮助你。也许其他人可以。正如我上面所说,同一个对象必须调用你的两个方法。或许你没有在故事板中正确分配一些东西。

答案 1 :(得分:0)

UIButton@IBAction func takePhotoButton之间的关联被破坏了。我通过删除整个CameraOverlayViewController并制作一个新的来修复它。

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