2015-11-04 3 views
0

Я работаю над QR-сканером в swift, который должен открыть URL-адрес и разобрать QR-данные в URL-адрес перед загрузкой в ​​недавно созданный веб-просмотр.Swift iOS 9 QR-сканер

Для этого я создал строку со своим URL-адресом и получателем, но добавив отсканированные данные.

При сканировании без функции данные анализируются на метку «lblQRCodeResult» без проблем, однако в какой-то момент при попытке открыть веб-просмотр, загружая адрес, приложение выйдет из строя.

Любые предложения?

Мой код, который в настоящее время выглядит следующим образом:

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 является необязательным, и функция преобразования может возвращать нулевой объект, как описано в документации.

Без сообщения об ошибке трудно сказать, но проверьте, действительно ли objBarCode и NSURL.

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