我想以.vcf文件格式备份ios联系人

我想以.vcf文件格式备份ios联系人,ios,objective-c,iphone,Ios,Objective C,Iphone,有人能解释一下如何在.vcf formate中进行联系人备份,iOS中的任何示例编码吗?#导入 #import <AddressBook/AddressBook.h> - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. ABAddressBookRef addressBook =

有人能解释一下如何在.vcf formate中进行联系人备份,iOS中的任何示例编码吗?

#导入
#import <AddressBook/AddressBook.h>

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    ABAddressBookRef addressBook = ABAddressBookCreate();

    __block BOOL accessGranted = NO;

    if (ABAddressBookRequestAccessWithCompletion != NULL) { // We are on iOS 6
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            accessGranted = granted;
            dispatch_semaphore_signal(semaphore);
        });

        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

    }

    else { // We are on iOS 5 or Older
        accessGranted = YES;
        [self getContactsWithAddressBook:addressBook];
    }

    if (accessGranted) {
        [self getContactsWithAddressBook:addressBook];
    }                
}

// Get the contacts.
- (void)getContactsWithAddressBook:(ABAddressBookRef )addressBook
{

    //----------------------------------------------- create vcf file------------------------------------------

    CFArrayRef contacts = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFDataRef vcards = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(contacts);
    NSString *vcardString = [[NSString alloc] initWithData:(__bridge NSData *)(vcards) encoding:NSUTF8StringEncoding];
    NSError *error;
    NSFileManager *fileMgr = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *folderPath = [paths objectAtIndex:0];
    NSString *filePath = [folderPath stringByAppendingPathComponent:@"contacts.vcf"];
    NSLog(@"%@===>",filePath);
    [vcardString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"Documents directory: %@",[fileMgr contentsOfDirectoryAtPath: folderPath error:&error]);

}
-(无效)viewDidLoad{ [超级视图下载]; //加载视图后,通常从nib执行任何其他设置。 ABAddressBookRef addressBook=ABAddressBookCreate(); __block BOOL accessgrated=否; 如果(ABAddressBookRequestAccessWithCompletion!=NULL){//我们在iOS 6上 dispatch\u semaphore\u t semaphore=dispatch\u semaphore\u create(0); ABAddressBookRequestAccessWithCompletion(addressBook,^(已授予bool,CFErrorRef错误){ accessgrated=已授予; 调度信号灯(信号灯); }); 调度信号灯等待(信号灯,调度时间永远); } 否则{//我们使用的是iOS 5或更高版本 accessgrated=是; [self-getContactsWithAddressBook:addressBook]; } 如果(已授予访问权限){ [self-getContactsWithAddressBook:addressBook]; } } //获取联系人。 -(无效)getContactsWithAddressBook:(ABAddressBookRef)addressBook { //-----------------------------------------------创建vcf文件------------------------------------------ CFArrayRef contacts=abAddressBookCopyArrayFallPeople(地址簿); CFDataRef vcards=(CFDataRef)ABPersonCreateVCardRepresentationWithPeople(contacts); NSString*vcardString=[[NSString alloc]initWithData:(_桥NSData*)(vcards)编码:NSUTF8StringEncoding]; n错误*错误; NSFileManager*fileMgr=[NSFileManager defaultManager]; NSArray*Path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是); NSString*folderPath=[paths objectAtIndex:0]; NSString*filePath=[folderPath stringByAppendingPathComponent:@“contacts.vcf”]; NSLog(@“%@===>”,文件路径); [vcardString writeToFile:filePath原子:是编码:NSUTF8StringEncoding错误:无]; NSLog(@“Documents directory:%@,[fileMgr contentsOfDirectoryAtPath:folderPath错误:&error]); }
试试这个,它会有用的