2015-11-04 82 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!))