gpt4 book ai didi

ios - 当二维码扫描回调到来时,导航 Controller 为零

转载 作者:行者123 更新时间:2023-11-29 05:45:02 24 4
gpt4 key购买 nike

我在ControllerA中有一个qr扫描仪的实现,它正在接收扫描数据的回调。 QRScanner 是我的自定义类

extension QRScanner : AVCaptureMetadataOutputObjectsDelegate {
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
if metadataObjects.count == 0 {
self.delegate?.scannedData(QRScannerErrorCode.NoData.rawValue)
return
}

let metadataObj = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
if metadataObj.type == AVMetadataObject.ObjectType.qr {
self.stopSession()
if metadataObj.stringValue != nil {
if (validateCode!(metadataObj.stringValue!)) {
self.delegate!.scannedData(metadataObj.stringValue!)
}
}
}
}
}

我正在接收来自上面的 Controller A 的回调。

extension ControllerA : QRScannerDelegate {
func scannedData(_ scannedString: String) {

if(validateData(scannedString: scannedString)) {
self.scanResult!.action = Action.SCAN
self.scanResult!.result = scannedString

assert(self.delegate != nil)

self.delegate!.result(result: self.scanResult!)
print("Nav stack:) \(System.currentTimeMillis())")
self.navigationController!.popViewController(animated: true)
}
}

func validateData(scannedString: String) -> Bool {
return true
}

}

func stopSession() {

assert(session != nil && session!.isRunning)

self.session!.stopRunning()
}

随着应用程序的流程,我测试了从该 Controller 到另一个 Controller 的来回导航。在我扫描二维码期间,我的应用程序崩溃了。当我放置日志时,我发现 navigationController 为零。

我知道二维码扫描仪会不断扫描图像并调用委托(delegate)。因此,我在扫描有效图像时添加了 stopSession ,但在崩溃之前我仍然得到了两个扫描结果。

I want to know why this is happening?

当我将 self.navigationController!.popViewController(animated: true) 放入调用 ControllerA 的 Controller 中时,应用程序不会崩溃。

最佳答案

您的 Controller 未添加到 UINavigationController 子类中,这就是 self.navigationController 为 nil 的原因(使用带有 nil 变量的 '!' 将会崩溃,这就是您发生的情况)

我认为您的 ScandData 函数在调用 stopSession() 之后仍然被调用,您必须添加一个标志(例如停止)并在您的 ScandData 函数上添加对该标志的测试。

我也认为你需要改变

self.navigationController!.popViewController(animated: true)

self.navigationController?.popViewController(animated: true)

避免崩溃。

关于ios - 当二维码扫描回调到来时,导航 Controller 为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com