2017-01-31 14 views
1

Я хочу спросить, если это возможно, чтобы прочитать VCF карту как данные CNContact как GivenName, FamilyName ...Прочтите VCFCard с QR-кода?

Это моя функция вывода QR Code Scanner

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 ... и т. Д. ... печать (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

и как я могу получить, например, данное имя? – patrikbelis

+0

@patrikbelis, пожалуйста, проверьте ссылку [CNContact'] (https://developer.apple.com/reference/contacts/cncontact), 'givenName' является просто свойством экземпляра CNContact ... – OOPer

+0

I когда я сканирую vcfCard как QR-код ... И как я могу получить заданное имя через эту сериализацию? – patrikbelis

 Смежные вопросы

  • Нет связанных вопросов^_^