2016-05-04 6 views
1

カスタムオーバーレイビューでカメラを使用する際に問題が発生します。エラー:インスタンスに送信されたセレクタが認識されません - オーバーレイビューでカメラを使用する

これは私が設定して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の新機能が魅力です。明らかに問題がある場合。 ;)

ありがとうございます。

答えて

0

UIButton@IBAction func takePhotoButtonの間の接続が切断されました。 CameraOverlayViewController全体を削除して新しいものを作ることで修正しました。

おそらくもっと簡単な方法がありましたが、Xcodeですべてのことがどのように連携しているかはまだ分かりません。

0

エラーは、間違ったオブジェクトでメソッドを呼び出すことを意味します。基本的にunrecognized selector...が出現すると、かっこの中に問題があることを意味します。

takePhotoButton()は、タイプAnyObjectの送信者がありますが、タイプCameraOverlayViewControllerの送信者を持つdidTakePhoto()を呼び出します。したがって、ボタンはビューコントローラによって呼び出されるメソッドを呼び出します。今あなたは矛盾を見ますか?

固定しています...私はそれを手伝ってはいけません。多分誰かができる。上で述べたように、同じオブジェクトは両方のメソッドを呼び出す必要があります。または、ストーリーボードで何かを適切に割り当てていない可能性があります。

+0

ローレンスが書いたように、「間違ったオブジェクトでメソッドを呼び出しています」、[UIView takePictureButton:]はUIViewクラスのインスタンスでtakePictureButtonメソッド呼び出しを意味します(多分myViewですか?)、間違っているはずです。 UIButtonインスタンスの呼び出し、IBでの接続を確認してください(ファイルオーナーとUIButtonを右クリックしてください)、その理由はどこかにあると思います。 –