Adding vCard data directly to the system Address Book

后端 未结 3 903
悲&欢浪女
悲&欢浪女 2021-02-03 11:42

I am designing a QR code reader, and it needs to detect and import contact cards in vCard format (.vcf).

is there a way to add the card data to the system Address Book d

3条回答
  •  [愿得一人]
    2021-02-03 12:14

    If you're running on iOS 5 or later, this code should do the trick:

    #import 
    
    // This gets the vCard data from a file in the app bundle called vCard.vcf
    //NSURL *vCardURL = [[NSBundle bundleForClass:self.class] URLForResource:@"vCard" withExtension:@"vcf"];
    //CFDataRef vCardData = (CFDataRef)[NSData dataWithContentsOfURL:vCardURL];
    
    // This version simply uses a string. I'm assuming you'll get that from somewhere else.
    NSString *vCardString = @"vCardDataHere";
    // This line converts the string to a CFData object using a simple cast, which doesn't work under ARC
    CFDataRef vCardData = (CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding];
    // If you're using ARC, use this line instead:
    //CFDataRef vCardData = (__bridge CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding];
    
    ABAddressBookRef book = ABAddressBookCreate();
    ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(book);
    CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
    for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {
        ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index);
        ABAddressBookAddRecord(book, person, NULL);
    }
    
    CFRelease(vCardPeople);
    CFRelease(defaultSource);
    ABAddressBookSave(book, NULL);
    CFRelease(book);
    

    Make sure to link to the AddressBook framework in your project.

提交回复
热议问题