2017-01-31 49 views
1

我想问一下是不是可以读取VCF卡像给定名称,familyName CNContact数据...从QR码中读取VCFCard?

这是我的QR码扫描输出功能

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 

    if metadataObjects == nil || metadataObjects.count == 0 { 
     qrCodeFrameView?.frame = CGRect.zero 
     messageLabel.text = "No QR/barcode is detected" 
     return 
    } 


    let metadataObj = metadataObjects[0] as! AVMetadataMachineReadableCodeObject 

    if supportedCodeTypes.contains(metadataObj.type) { 
     let barCodeObject = videoPreviewLayer?.transformedMetadataObject(for: metadataObj) 
     qrCodeFrameView?.frame = barCodeObject!.bounds 

     if metadataObj.stringValue != nil { 
      messageLabel.text = metadataObj.stringValue 
     } 
    } 
} 

打印输出

" 
<AVMetadataMachineReadableCodeObject: 0x17022d1e0, type="org.iso.QRCode", bounds={ 0.3,0.4 0.1x0.3 }>corners { 0.3,0.7 0.5,0.7 0.5,0.4 0.3,0.4 }, time 93849323998125, stringValue "BEGIN:VCARD 

VERSION:3.0 

PRODID:-//Apple Inc.//iPhone OS 10.2//EN 

N:Hank;Patrick;;; 

FN: Patrick Hank 

EMAIL;type=INTERNET;type=HOME;type=pref:[email protected] 

TEL;type=IPHONE;type=CELL;type=VOICE;type=pref:0911311911 

END:VCARD 

" 
+0

你的代码没有'print',所以我不确定你的“打印输出”是什么。但是你可以尝试'CNContactVCardSerialization'。 – OOPer

+0

我在MessageLabel.text下添加了...等。 ... print(metadataObj)..尝试但不知道如何 – patrikbelis

回答

1

我无法用您的QR码测试,但这会有一些帮助:

 if 
      let metadataString = metadataObj.stringValue, 
      let data = metadataString.data(using: .utf8) 
     { 
      do { 
       let contacts = try CNContactVCardSerialization.contacts(with: data) 
       print(contacts) 
       //Use `contacts` as you like 
       if let contact = contacts.first { 
        print(contact.givenName) 
        //... 
       } 
       //... 
      } catch { 
       //Unreadable as CNContact 
       print(error) 
       //... 
      } 
     } else { 
      //May never happen... 
     } 
+0

以及如何获得例如givenName? – patrikbelis

+0

@patrikbelis,请查看[CNContact'的参考](https://developer.apple.com/reference/contacts/cncontact),'givenName'只是'CNContact'实例的一个属性... – OOPer

+0

I意思是当我扫描vcfCard作为QR码...我怎样才能得到givenName通过序列化? – patrikbelis