我在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()
}
通过应用程序流程,我测试了从该控制器到另一个控制器的来回导航。在此之间,我扫描二维码,然后我的应用崩溃。 当我放置日志时,我发现navigationController为零。
我知道qr扫描仪会连续扫描图像并呼叫委托。因此,我在扫描有效图像时添加了stopSession
,但仍然在崩溃前紧接返回两个扫描结果。
我想知道为什么会这样吗?
当我将self.navigationController!.popViewController(animated: true)
放在调用ControllerA
的控制器中时,该应用不会崩溃。
答案 0 :(得分:0)
您的控制器未添加到UINavigationController子类中,这就是self.navigationController为nil的原因(使用带有nil变量的'!'会崩溃,而这对您而言是发生的事情)
我认为在调用stopSession()之后仍要调用您的scandData函数,您必须添加一个标志(例如已停止),并在您的scandData函数上对该标志添加测试。
我还认为你需要改变
Get-childitem "C:\Users\xx\test powershell script\*" -include *.jpg -recurse |% {
$nextName = Join-Path -Path 'C:\Users\xx\test powershell script\*' -ChildPath $_.name
while(Test-Path -Path $nextName)
{
$nextName = Join-Path "C:\Users\xx\test powershell script" ($_.BaseName + "_$num" + $_.Extension)
$num+=1
}
$ParentOjbect =$_.Directory
$Parent =$ParentOjbect.Name
$GrandParent = $ParentOjbect.Parent
$GreatGran = $GrandParent.Parent
$Extension = $_.Extension
$countRef = [ref] 0
Copy-item $_ -Destination (Join-Path "C:\Users\xx\test powershell script" ('{0}_{1}_{2}{3}' -f $GrandParent,$GreatGran,++$countRef.Value,$Extension))
}
使用
self.navigationController!.popViewController(animated: true)
避免崩溃。