0

ISBN コード (本の識別子) をスキャンして、以前にビューを作成したいと考えています。そのため、元のビューに戻るセグエを実行します。

そして、クレイジーなことが起こりました。ログインビュー(初期ビュー)に戻ると、ビューとアプリケーションが表示され、例外として自動的にログインし(cozはすでに登録されています)、新しい本を追加するための追加ボタンがあるtableViewで停止します。

BookVC の後、アプリが最初の VC にジャンプする理由がわかりません。

ScanBookViewController.swift :

class ScanBookViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {

    var book = Book()

    var captureSession: AVCaptureSession!
    var previewLayer: AVCaptureVideoPreviewLayer!

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = UIColor.blackColor()
        captureSession = AVCaptureSession()

        let videoCaptureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
        let videoInput: AVCaptureDeviceInput

        do {
            videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
        } catch {
            return
        }

        guard captureSession.canAddInput(videoInput) else {
            alertPopUp("Scanning not supported", message: "Your device does not support scanning a code from an item. Please use a device with a camera.")
            captureSession = nil
            return
        }
        captureSession.addInput(videoInput)

        let metadataOutput = AVCaptureMetadataOutput()

        guard captureSession.canAddOutput(metadataOutput) else {
            alertPopUp("Scanning not supported", message: "Your device does not support scanning a code from an item. Please use a device with a camera.")
            captureSession = nil
            return
        }
        captureSession.addOutput(metadataOutput)
        metadataOutput.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
        metadataOutput.metadataObjectTypes = [AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeEAN13Code]

        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        previewLayer.frame = view.layer.bounds
        previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
        view.layer.addSublayer(previewLayer)

        captureSession.startRunning()
    }

    func alertPopUp(title:String, message:String) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in
            self.dismissViewControllerAnimated(true, completion: nil)
        }))
        self.presentViewController(alert, animated: true, completion: nil)
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        if (captureSession?.running == false) {
            captureSession.startRunning()
        }
    }

    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)

        if (captureSession?.running == true) {
            captureSession.stopRunning()
        }
    }

    func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
        captureSession.stopRunning()

        if let metadataObject = metadataObjects.first {
            let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject

            AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
            foundCode(readableObject.stringValue)
        }

        dismissViewControllerAnimated(true, completion: nil)
    }


    func foundCode(code: String) {
        book.setISBN(code)
        book.setTitle("Super Titre")
        book.setAuthor("Gil Felot")
        book.setCover(UIImage(named: "iu.png")!)
        performSegueWithIdentifier("infoFinded", sender: nil)
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if segue.identifier == "infoFinded" {
            let bookVC: BookViewController = segue.destinationViewController as! BookViewController
            bookVC.book = book
        }
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }

    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return .Portrait
    }
}

BookViewController.swift :

class BookViewController: UIViewController {

    var book:Book!

    @IBOutlet weak var bookImage: UIImageView!
    @IBOutlet weak var bookTable: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        if book == nil {
            print("test segue")
            performSegueWithIdentifier("scanCode", sender: nil)
        } else {
            bookImage.image = book.getCover()
        }

        // Do any additional setup after loading the view.
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

どこを見ればいいのかわからないので、どんなアイデアでも!

4

1 に答える 1