繁体   English   中英

当我返回菜单时,应用程序崩溃(线程 1:信号 SIGABRT)

[英]When I go back to menu, the App crashes (Thread 1: signal SIGABRT)

我几乎完成了我的应用程序“AR Note”。 我只需要修复一个错误。

我有一个主菜单,其中有 7 个按钮链接到视图控制器。 回到主菜单我使用

@IBAction func unwindFromSources(segue: UIStoryboardSegue){
    }

在我的旧版本中,这工作得很好。 我改变的只是,我的主菜单的背景是一个模糊的相机视图,效果很好。 现在,有了这个模糊相机视图背景,应用程序总是崩溃,线程 1:信号 SIGABRT! 这在我看来很尴尬,因为它说没有错误,而且没有模糊的相机视图背景,后退按钮工作正常。

这是我的主菜单代码:

import UIKit
import AVFoundation

class ViewControllerBlurrHome: UIViewController {

    @IBAction func unwindFromSources(segue: UIStoryboardSegue){
    }

    let session: AVCaptureSession = AVCaptureSession()

    override func viewDidLoad() {
        super.viewDidLoad()
    }



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

        session.sessionPreset = AVCaptureSession.Preset.high

        if let device = AVCaptureDevice.default(for: AVMediaType.video) {
            do {
                try session.addInput(AVCaptureDeviceInput(device: device))

            } catch {
                print(error.localizedDescription)
            }

            let previewLayer = AVCaptureVideoPreviewLayer(session: session)

            self.view.layer.insertSublayer(previewLayer,at:0)
            previewLayer.frame = self.view.layer.bounds

        }



        session.startRunning()

        let blur = UIBlurEffect(style: .regular)
        let blurView = UIVisualEffectView(effect: blur)
        blurView.frame = self.view.bounds
        blurView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        self.view.insertSubview(blurView,at:1)

    }


// ShareButton
    @IBAction func sharePressed(_ sender: Any) {
        let activityVC = UIActivityViewController(activityItems: ["enter App Link here"], applicationActivities: nil)
        activityVC.popoverPresentationController?.sourceView = self.view
        self.present(activityVC, animated: true, completion: nil)
    }


}

这是我的主菜单的样子:

图片1

这是我的 main.storyboard 的样子:

图像2

这就是我使用后退按钮的方式:

图像3

这是一个替代viewcontroller.swift ,没有模糊的东西,它工作得很好:

import UIKit

class ViewControllerBasis: UIViewController {


    @IBAction func unwindFromSources(segue: UIStoryboardSegue){
    }


    override func viewDidLoad() {
        super.viewDidLoad()

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

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



    @IBAction func sharePressed(_ sender: Any) {
        let activityVC = UIActivityViewController(activityItems: ["enter App Link here"], applicationActivities: nil)
        activityVC.popoverPresentationController?.sourceView = self.view
        self.present(activityVC, animated: true, completion: nil)
    }

你是这个意思吗?

图 4

有这个:

图像5

和这个:

图 6

发生这种情况很可能是因为您将 AV 代码放在viewWillAppear 每次进入视图时都会执行此方法(在您的情况下,是在应用程序启动和用户返回主菜单时)。

这一行绝对不是要多次执行:

try session.addInput(AVCaptureDeviceInput(device: device))

和这个:

session.startRunning()

和这个:

self.view.insertSubview(blurView,at:1)

一个快速的解决方法是将所有这些逻辑放在一个专用函数中,并添加一个标志来只运行一次。 类似的东西:

override func viewWillAppear(_ animated: Bool) {
   super.viewWillAppear(animated)
   addBlur()
}

var didAddBlur = false
func addBlur() {
   if didAddBlur {
       return
   }

   didAddBlur = true

   //Your code
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM