无法从Swift中的警报视图打开QR网址

时间:2015-12-18 18:50:34

标签: swift uialertview qr-code nsurl func

我正在尝试使用Swift从QR打开一个URL,但我无法使用代码来执行此操作。我试过这个功能代码:

func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {

    if metadataObjects == nil || metadataObjects.count == 0 {
        vwQRCode?.frame = CGRectZero
        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 alert = UIAlertController(title: "Se ha detectado QR", message: objMetadataMachineReadableCodeObject.stringValue, preferredStyle: UIAlertControllerStyle.Alert)
            alert.addAction(UIAlertAction(title: "Abrir Link", style: UIAlertActionStyle.Default, handler: //nil))

                {action in

                    //UIApplication.sharedApplication().openURL(NSURL(string: "http://www.google.cl")!)
                    UIApplication.sharedApplication().openURL(NSURL(fileURLWithPath: objMetadataMachineReadableCodeObject.stringValue))
            }))

            alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
            self.presentViewController(alert, animated: true, completion: nil)
        }
    }
}

但是,当我点击alertView中的按钮时,什么都不做。 然后我尝试使用谷歌URL并打开没有问题。 请有人帮助我!

2 个答案:

答案 0 :(得分:1)

没有任何反应,因为系统无法处理生成的URL。您应该在以下之前检查此功能:

let url = NSURL(fileURLWithPath: objMetadataMachineReadableCodeObject.stringValue)
if UIApplication.sharedApplication().canOpenURL(url) {
   UIApplication.sharedApplication().openURL(url)
}

您的二维码真的会导致文件网址或网络链接吗?

答案 1 :(得分:0)

您的代码似乎运行得很好。试着做一个简单的事情:

print(objMetadataMachineReadableCodeObject.stringValue)

并查看返回的内容,因为它表明这是您的问题所在。您的QR码可能包含一些引号吗?