我正在使用swift中的QR扫描程序,它应该打开一个URL并将QR数据解析为URL,然后再加载到新制作的webview中。
为此,我使用我的URL和获取,但添加了扫描数据。
在没有该功能的情况下进行扫描时,数据被解析为标签“lblQRCodeResult”没有问题,但是在尝试打开加载地址的webview时,应用程序崩溃了。
有什么建议吗?
我的代码目前看起来像这样:
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
if metadataObjects == nil || metadataObjects.count == 0 {
vwQRCode?.frame = CGRectZero
lblQRCodeResult.text = "NO QRCode text detacted"
return
}
let objMetadataMachineReadableCodeObject = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
if objMetadataMachineReadableCodeObject.type == AVMetadataObjectTypeQRCode {
let objBarCode = objCaptureVideoPreviewLayer?.transformedMetadataObjectForMetadataObject(objMetadataMachineReadableCodeObject as AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject
vwQRCode?.frame = objBarCode.bounds;
if objMetadataMachineReadableCodeObject.stringValue != nil {
let newString = "http://192.168.2.1/qr.php?type=buy&prod=" + objMetadataMachineReadableCodeObject.stringValue;
lblQRCodeResult.text = newString
let webV:UIWebView = UIWebView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height))
webV.loadRequest(NSURLRequest(URL: NSURL(string: newString)!))
webV.delegate = self;
self.view.addSubview(webV)
}
}
}
答案 0 :(得分:0)
当您尝试获取objBarCode
时,您将变量转换为明确展开的AVMetadataMachineReadableCodeObject
,以确保它始终存在。但是,您的objCaptureVideoPreviewLayer
是可选的,转换函数可以返回nil对象,如文档中所述。
如果没有错误消息,很难说,但请检查objBarCode
和NSURL
是否都有效。
答案 1 :(得分:0)
解决了这个问题。
let newString = "http://192.168.2.1/qr.php?type=buy&prod=" + objMetadataMachineReadableCodeObject.stringValue;
let url = NSString(string: newString)
let urlStr = NSString(string: url.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)
let newNS = NSURL(string: urlStr as String)
print(newNS)
//Load URL
webV.loadRequest(NSURLRequest(URL: newNS!))