2012-09-26 24 views
1

我找到了将vCard保存到设备的代码。 此代码在模拟器上工作良好,但在设备上尝试代码时,我看不到新联系人。 该代码是:无法在使用地址簿的设备上保存联系人 - xcode

NSString *vCardString = @"BEGIN:VCARD\nVERSION:2.1\nN:Standard11.3,Joe;\nADR:PO Box 555,Suite 55,5555 Any Street,San Diego,CA,92111,USA;;\nEND:VCARD"; 

    CFDataRef vCardData = (CFDataRef)CFBridgingRetain([vCardString dataUsingEncoding:NSUTF8StringEncoding]); ABAddressBookRef book = ABAddressBookCreate(); 
    ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(book); 
    CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData); 
    CFRelease(vCardData); 
    for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) { 
     ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index); 
     ABAddressBookAddRecord(book, person, NULL); 
     //CFRelease(person); 
    } 
    CFRelease(vCardPeople); 
    CFRelease(defaultSource); 
    ABAddressBookSave(book, NULL); 
    CFRelease(book); 

任何想法为什么? 另一件事,是我看到在其他应用程序的设置使用通讯录的权限,也许这就是解决方案?

回答

1

如果这是在iOS 6上,您需要询问用户的权限才能访问通讯簿。

ABAddressBookRef ref = ABAddressBookCreate(); 
ABAddressBookRequestAccessWithCompletion(ref, ^(bool granted, CFErrorRef error) { 
    if(granted) { 
     //Use the address book 
    } 
}); 

这会提示用户可以批准您的应用程序的提示。

+0

谢谢'这就是我所做的 –

相关问题