2017-07-01 5 views
-1

Ich möchte den CameraViewController durch Klicken auf eine Schaltfläche aufrufen und dann ein Bild von QR-Code machen. Ich erhalte diesen Fehler Thank U allen für die Hilfe ich jeden Viewcontroller seiner Art in der Storyboard gabStoryboard enthält keinen View-Controller mit der Kennung 'goToC'

import UIKit 

class movieListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet weak var movieTableView: UITableView! 



    var movie:[Movie] = [Movie]() 
    var currentMovies:[Movie] = [Movie]() 
    var counter = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     movie = Helpers.downloadJson() 
     self.movieTableView.reloadData() 
     sort() 

    } 

    func sort() { 
     movie.sort(by: { $0.releaseYear < $1.releaseYear }) 
     movieTableView.reloadData() 

    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return movie.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "MovieCell") as! MovieCell 

     cell.createCell(movie: movie[indexPath.row]) 

     return cell 
    } 

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     let selectedMovie = movie[indexPath.row] 
     performSegue(withIdentifier: "goToDetail", sender: selectedMovie) 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     let nextVC = segue.destination as! DetailViewController 
     nextVC.movie = sender as! Movie 
    } 

    @IBAction func addTapped(_ sender: Any) { 
     let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let nextView = storyBoard.instantiateViewController(withIdentifier: "goToC") as! CameraViewController 
     self.present(nextView, animated: true, completion: nil) 

    } 

} 

    CameraViewController: 


    import UIKit 
    import AVFoundation 

    class CameraViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate { 

     var captureSession: AVCaptureSession? 
     var videoPreviewLayer: AVCaptureVideoPreviewLayer? 
     var qrCodeFrameView: UIView? 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      let captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) 

      do { 
       let input = try AVCaptureDeviceInput(device: captureDevice) 
       captureSession = AVCaptureSession() 
       captureSession?.addInput(input) 
      } catch { 
       print(error) 
       return 
      } 
      let captureMetaDataOutput = AVCaptureMetadataOutput() 
      captureSession?.addOutput(captureMetaDataOutput) 
      captureMetaDataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 
      captureMetaDataOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode] 
      videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
      videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill 
      videoPreviewLayer?.frame = view.layer.bounds 
      view.layer.addSublayer(videoPreviewLayer!) 

      captureSession?.startRunning() 

      qrCodeFrameView = UIView() 

      if let newFrame = qrCodeFrameView { 
       newFrame.layer.borderColor = UIColor.green.cgColor 
       newFrame.layer.borderWidth = 2 
       view.addSubview(newFrame) 
       view.bringSubview(toFront: newFrame) 
      } 

     } 

    } 




    DetailViewController 

    import UIKit 

    class DetailViewController: UIViewController { 
     @IBOutlet weak var movieImage: UIImageView! 
     @IBOutlet weak var titleLbl: UILabel! 
     @IBOutlet weak var releaseYearLbl: UILabel! 
     @IBOutlet weak var ratingLbl: UILabel! 

     var movie: Movie = Movie() 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      titleLbl.text = movie.title 
      ratingLbl.text = "Rating: \(movie.rating) ⭐️" 
      releaseYearLbl.text = "Release Year: \(movie.releaseYear)" 

      movieImage.layer.cornerRadius = 5.0 
      movieImage.clipsToBounds = true 

      movieImage.sd_setImage(with: URL(string: movie.image)) 
     } 

     @IBAction func backToList(_ sender: Any) { 
      self.dismiss(animated: true, completion: nil) 
     } 


    } 
+0

Sie müssen haben segue falsch eingestellt haben ... –

+0

Überprüfen Sie die segue, dass sie richtig sind und es die Zielansicht-Controller ist die gleiche wie Sie es wollen –

+0

möglich duplizieren [diese Option] (https://stackoverflow.com/questions/31440964/cant-cast-value-of-type- uiviewcontroller-to-patterndetailviewcontroller) –

Antwort

6

Xcode 8.2.1

Ich dachte CameraViewController in Ihrem Main Storyboard ist.

In Main Storyboard erste gelbe Taste oben auf der entsprechenden viewController und gehe wählen identity inspector -> identity -> Storyboard ID Ihre View-Controller-Kennung für diesen Fall eingeben goToC

enter image description here

+0

Danke Mann. das hat funktioniert – omriknight9

+0

@ omriknight9, Du bist willkommen Kumpel :) –

Verwandte Themen