我是目标 C 的新手,我处于急需创建应用程序的位置。我正在使用 XCode 4.2
在应用程序的一部分中,我将检测 QR 码并获取 NSString 格式的 VCard:我使用以下代码完成了该功能:-我将以下内容导入框架:
AddressBookUI.framework
AddressBook.framework
在我写的 .h 文件中:
#import <addressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
@interface HellowWorld : UIViewController<ABPeoplePickerNavigationControllerDelegate>{
}
-(IBAction)saveContacts;
@end
在我写的 .m 文件中:
-(IBAction)saveContacts{
NSString *vCardString = test //where the data will be comming from
CFDataRef vCardData = (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(person);
}
CFRelease(vCardPeople);
CFRelease(defaultSource);
ABAddressBookSave(book, NULL);
CFRelease(book);
}
我使用了这段代码,但它不起作用。
首先它没有编译这一行:
CFDataRef vCardData = (CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding];
我不得不将其更改为:
CFDataRef vCardData = (__bridge CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding];
并在编译后在这一行崩溃:
for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {
它给出以下绿色错误:Thread1: Program Received Signal "EXC_BAD_ACCESS"
。有什么理由吗?
这也是在地址簿中保存 VCard(以 NSString 格式)的唯一方法吗?还有其他建议吗?