2015-11-04 102 views
0

我正在使用swift中的QR扫描器,它应该打开一个URL并将QR数据解析到URL中,然后在新制作的webview中加载。Swift iOS 9 QR扫描器

为此我用我的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

如果您的应用崩溃,错误消息是什么? – Larme

回答

0

当你试图获得objBarCode,您铸造的变量作为明确解开AVMetadataMachineReadableCodeObject,保证它始终存在。但是,objCaptureVideoPreviewLayer是可选的,并且转换函数可能会返回一个零对象,如文档中所述。

没有错误信息很难说,但检查objBarCodeNSURL都是有效的。

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!))