我想以.vcf文件格式备份ios联系人
有人能解释一下如何在.vcf formate中进行联系人备份,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 =
#导入
#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]);
}
试试这个,它会有用的