2013-04-30 3 views
2

본인은 QR 코드의 vCard의 연락처 정보의 세부 사항을 QR 코드의 vCard를 읽고 표시하는 데 사용되는 하나의 간단한 응용 프로그램을 개발하고있다. vCard를 스캔하여 다음과 같이 연락처에 대한 세부 정보를 얻을 수 있습니다.iPhone : QR code vCard에서 각 요소를 얻는 방법?

BEGIN:VCARD 
VERSION:2.1 
N:XX;XXXXXXXX 
FN:XXXXXXXXX XX 
TEL;WORK;VOICE:91999999999 
EMAIL;WORK;INTERNET:[email protected] 
END:VCARD 

하지만 각 요소를 구문 분석해야합니다. 세부 사항을 파싱하는 방법과 파싱하는 방법은 무엇입니까? 이 방법

+0

우리가 어떻게이 정보는 당신이 사용하는 QR 코드 FO 코드를 의미 인출하는 몇 가지 코드가 필요에서 CNContact 개체를 가져 CNContactVCardSerialization를 사용할 수 있습니다. –

+0

@SAMIRRATHOD Zbar sdk를 사용하고 있습니다. – sachi

답변

1

문서 포인트 :

- (void) imagePickerController: (UIImagePickerController*) reader 
didFinishPickingMediaWithInfo: (NSDictionary*) info 
{ 
    id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults]; 

    ZBarSymbol *symbol = nil; 

    for(symbol in results){ 

     NSString *upcString = symbol.data; 

     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Scanned UPC" message:[NSString stringWithFormat:@"The UPC read was: %@", upcString] delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil]; 

     [alert show]; 

     [reader dismissModalViewControllerAnimated: YES];  
    }  

} 내가 먼저 어쩌면 추가 데이터

의 사전을 반복하려고 반환 무엇을 볼 것입니다

+1

내 질문에서 말한 것과 똑같이 나타납니다. BEGIN : VCARD VERSION 2.1 N : XX]을 XXXXXXXX FN : XXXXXXXXX XX TEL; WORK; VOICE : 91,999,999,999 EMAIL; WORK; INTERNET : [email protected] END : VCARD – sachi

+0

시작 : VCARD 버전 3.0 N :베드로;;;; FN : 피터 제목 : CEO의 ORG : URL에 의해 ° QRD; WORK : qrd.by 이메일, 인터넷 : END [email protected] : 내가 QRCode의를 스캔 할 때 문자열 위 VCARD 얻을. 이제는 자동 채워진 연락처 양식을 보여줘야합니다. url을 참조하십시오. https://blog.qrd.by/wp-content/uploads/2017/09/vcard-qr-code.jpg – Ashu

0

당신은 QRCode의

의 인코더를 사용할 수 있습니다

Encoder

1

음,이 질문에 대해 상당히 오랜 시간이 걸렸습니다. 그러나 지금 응답하면이 페이지로 이동 한 사람을 도울 수 있습니다. 아래의 방법을 참조하여 VCF 데이터를 파싱 할 수 있습니다.

NSString *str = [NSString stringWithString:response.vcfString]; 
    NSArray *subStrings = [str componentsSeparatedByCharactersInSet:[NSCharacterSet  characterSetWithCharactersInString:@"\n"]]; 
    NSArray *getData = [[NSArray alloc]init]; 

    NSString *arr = @""; 

    for (int i=0;i<[subStrings count];i++) 
    { 
     arr = [subStrings objectAtIndex:i]; 

     NSArray *abc = [arr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@";"]]; 

     if([[abc objectAtIndex:0] isEqualToString:@"FN"]) 
     { 
      getData=[[abc objectAtIndex:1] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"] ]; 

      if([getData count] > 1) 
      fullName = [getData objectAtIndex:1]; 
     } 
     else if([[abc objectAtIndex:0] isEqualToString:@"N"]) 
     { 
      getData=[[abc objectAtIndex:1] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"]]; 

      if([getData count] > 1) 
      lastName = [getData objectAtIndex:1]; 
      FirstName = [abc objectAtIndex:2]; 
     } 
     else if([[abc objectAtIndex:0] isEqualToString:@"TITLE"]) 
     { 
      getData=[[abc objectAtIndex:1] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"]]; 

      if([getData count] > 1) 
      title = [getData objectAtIndex:1]; 
     } 
     else if([[abc objectAtIndex:0] isEqualToString:@"TEL"]) 
     { 
      NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
      if([abc count] == 3) 
      { 
       getData=[[abc objectAtIndex:2] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"]]; 

       if([[abc objectAtIndex:1] isEqualToString:@"WORK"]) 
       { 
        if([getData count] > 1) 
         [dict setObject:[getData objectAtIndex:1] forKey:@"Tel"]; 
       } 
       else if([[abc objectAtIndex:1] isEqualToString:@"CELL"]) 
       { 
        if([getData count] > 1) 
         [dict setObject:[getData objectAtIndex:1] forKey:@"Tel"]; 
       } 
      } 
      else if([abc count] == 4) 
      { 
       getData=[[abc objectAtIndex:3] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"]]; 

       if([[abc objectAtIndex:1] isEqualToString:@"WORK"] && [[abc objectAtIndex:2] isEqualToString:@"FAX"]) 
       { 
        if([getData count] > 1) 
         [dict setObject:[getData objectAtIndex:1] forKey:@"Tel"]; 
       } 
      } 
      else 
      { 
       getData=[[abc objectAtIndex:1] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"]]; 

       if([[getData objectAtIndex:0] isEqualToString:@"WORK"]) 
       { 
        if([getData count] > 1) 
         [dict setObject:[getData objectAtIndex:1] forKey:@"Tel"]; 
       } 
       else if([[getData objectAtIndex:0] isEqualToString:@"FAX"]) 
       { 
        if([getData count] > 1) 
         [dict setObject:[getData objectAtIndex:1] forKey:@"Tel"]; 
       } 
      } 
      [_telList addObject:dict]; 
     } 
     else if([[abc objectAtIndex:0] isEqualToString:@"EMAIL"]) 
     { 
      NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 

      if([abc count] == 3) 
      { 
       getData=[[abc objectAtIndex:2] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"]]; 

       if([[abc objectAtIndex:1] isEqualToString:@"WORK"]) 
       { 
        if([getData count] > 1) 
         [dict setObject:[getData objectAtIndex:1] forKey:@"Email"]; 
       } 
      } 
      else 
      { 
       getData=[[abc objectAtIndex:1] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"]]; 

       if([getData count] > 1) 
        [dict setObject:[getData objectAtIndex:1] forKey:@"Email"]; 
      } 
      [_emailList addObject:dict]; 
     } 
     else if([[abc objectAtIndex:0] isEqualToString:@"ORG"]) 
     { 
      NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 

      if([abc count] == 5) 
      { 
       getData=[[abc objectAtIndex:2] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"]]; 

       if([[abc objectAtIndex:1] isEqualToString:@"WORK"]) 
       { 
        NSString *orgStr = @""; 
        if([getData count] > 1) 
        { 
         orgStr = [getData objectAtIndex:1]; 
        } 
        [dict setObject:[orgStr stringByAppendingString:[abc objectAtIndex:4]] forKey:@"Org"]; 
       } 
      } 
      else 
      { 
       getData=[[abc objectAtIndex:1] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"]]; 

       if([getData count] > 1) 
        [dict setObject:[getData objectAtIndex:1] forKey:@"Org"]; 
      } 
      [_orgList addObject:dict]; 
     } 
     else if([[abc objectAtIndex:0] isEqualToString:@"ADR"]) 
     { 
      NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
      if([abc count] == 9) 
      { 
       [dict setObject:[abc objectAtIndex:4] forKey:@"Add"]; 
       [dict setObject:[abc objectAtIndex:8] forKey:@"Country"]; 
       [dict setObject:[abc objectAtIndex:7] forKey:@"Zip"]; 
       [dict setObject:[abc objectAtIndex:5] forKey:@"City"]; 
      } 
      else 
      { 

      } 

      [_addrList addObject:dict]; 
     } 
     else if([[abc objectAtIndex:0] isEqualToString:@"URL"]) 
     { 
      NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
      if([abc count] == 3) 
      { 
       getData=[[abc objectAtIndex:2] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"]]; 

       if([getData count] > 1) 
        [dict setObject:[getData objectAtIndex:1] forKey:@"Url"]; 
      } 
      else 
      { 
       getData=[[abc objectAtIndex:1] componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@":"]]; 

       if([getData count] > 1) 
        [dict setObject:[getData objectAtIndex:1] forKey:@"Url"]; 
      } 

      [_urlList addObject:dict]; 
     } 
     else 
     { 

     } 
    } 


    NSLog(@"Details: \nFull Name - %@\nLast Name - %@\nFirst Name - %@\ntitle - %@\nEmail - %@\norg - %@\nAddress - %@\nUrl - %@", fullName,lastName,FirstName,title,[[_emailList valueForKey:@"description"] componentsJoinedByString:@""],[_orgList description],[_addrList description],[_urlList description]); 
0

당신은 데이터

import Contacts 
    if let data = str.data(using: .utf8) { 
     do { 
      let contacts = try CNContactVCardSerialization.contacts(with: data) 
      let contact = contacts.first 
      print("\(String(describing: contact?.familyName))") 
      return contact 
     } catch { 
      print("Contact Error: \(error.localizedDescription)") 
     } 
    } 
+0

시작 도와주세요 : VCARD 버전 : 3.0 N을 : 피터을 ;;;; FN : 피터 TITLE : CEO ORG : URL에 의해 ° QRD; WORK : HTTPS : 이메일 //qrd.by, 인터넷 : END [email protected] : 내가 QRCode의를 스캔 할 때 VCARD 문자열 위 얻을. 이제는 자동 채워진 연락처 양식을 보여줘야합니다. url을 참조하십시오. https://blog.qrd.by/wp-content/uploads/2017/09/vcard-qr-code.jpg – Ashu

+0

@Ashu 도와주세요. Apple이 Default Contact Form을 표시하는 공개 API를 제공하지 않았다고 생각합니다. 현재 수동으로 생성해야합니다. –

+0

그러나 다른 응용 프로그램은 또한 [CNContactViewController]보십시오이 – Ashu