2013-04-30 4 views
2

Я разрабатываю одно простое приложение, которое используется для чтения QR-кода vCard и отображения информации о контактной информации в QR-код vCard. Я могу сканировать визитную карточку и получить подробную информацию о контакте следующимiPhone: Как получить каждый элемент с QR-кода vCard?

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

Но мне нужно разобрать каждый элемент в нем. Как разбирать детали и каковы способы анализа?

+0

нам нужен какой-то код, как принести эта информация означает код Fo QR код, который вы использовали. –

+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

Он покажет то же, что и в моем вопросе. НАЧАТЬ: VCARD Версия: 2.1 N: XX; XXXXXXXX FN: XXXXXXXXX ХХ TEL; РАБОТА; ГОЛОС: 91999999999 ВЕБСАЙТОМ; РАБОТЫ; ИНТЕРНЕТ: [email protected] КОНЕЦ: VCARD – sachi

+0

НАЧАТЬ: VCARD версия: 3,0 Н :Питер;;;; FN: Peter TITLE: CEO ORG: qrd ° по URL-адресу; РАБОТА: qrd.by EMAIL; INTERNET: [email protected] END: VCARD Над строкой получайте, когда я скачу QRCode. Теперь я должен показать автоматически заполненную контактную форму, как это. см. 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

Вы можете использовать CNContactVCardSerialization получить CNContact объект из данных

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: Peter ;;;; FN: Питер TITLE: генеральный директор ORG: КРФ ° по URL; РАБОТА: https: //qrd.by ящикам; ИНТЕРНЕТ: [email protected] END: VCARD Над строкой получить, когда я отсканировать QRCode. Теперь я должен показать автоматически заполненную контактную форму, как это. см. URL. https://blog.qrd.by/wp-content/uploads/2017/09/vcard-qr-code.jpg Пожалуйста, помогите – Ashu

+0

@Ashu. Я думаю, что яблоко не предоставляет каких-либо общедоступных API-интерфейсов для отображения формы контакта по умолчанию. В настоящее время мы должны создать его вручную. –

+0

Но другое приложение также делает это – Ashu