我已经编写了代码,因此当我进入后台并返回摄影机会话时,它不会搞砸,但事实并非如此。当您返回时,出现以下错误:
2019-01-29 18:04:57.702967-0500 Proj [2105:617183] *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* --[AVCaptureSession addOutput:]无法添加输出以捕获会话
有问题的代码如下:
func notificationCenter() {
NotificationCenter.default.addObserver(self, selector: #selector(willResignActive), name: UIApplication.willResignActiveNotification , object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(openedAgain), name: UIApplication.didBecomeActiveNotification, object: nil)
}
@objc func openedAgain() {
setupCamera() //This is your function that contains the setup for your camera.
}
@objc func willResignActive() {
print("Entered background")
let inputs = captureSession.inputs
for oldInput:AVCaptureInput in inputs {
captureSession.removeInput(oldInput)
}
}
此处的方法在viewdidload
注意:返回时,即使出现错误,摄像头会话似乎仍然可以正常工作,因为我可以看到凸轮看到的内容,但是除了移动凸轮之外,我无法执行其他任何操作。
答案 0 :(得分:0)
根据Docs
addOutput:此方法在调用时会引发异常,并且canAddOutput(_ :)返回false。
因此,在添加任何输出之前,必须先检查canAddOutput
与添加输入canAddInput
关于您的问题,请在辞职时使用captureSession.stopRunning()
,在活动时需要使用captureSession.startRunning()
NotificationCenter.default.addObserver(self, selector: #selector(stopTheSession), name: UIApplication.applicationDidEnterBackground, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(startTheSession), name: UIApplication.applicationWillEnterForeground, object: nil)