VCard阅读器不能正常工作
我是新来的目标C,我处于需要紧急创建应用程序的位置。我使用的XCode 4.2VCard阅读器不能正常工作
在App我会检测到QR码和的NSString格式得到一个电子名片的一部分: 我用下面的代码做了功能: -I进口下列到框架:
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格式)的唯一方法吗?任何其他建议?
我假设你已经启用了ARC。
CFRetain
vCardData
当您使用它的对象时是否停止崩溃?数据对象可能只能存在直到范围结束。
或者可能更好,使用__bridge_retained
我试过__bridge_retained,但它仍然不能正常工作 我不确定我是否理解你的问题,它在for循环中崩溃 – user1044771
@ user1044771:你是否检查过“vCardPeople”非空,并且是阵列? – JeremyP
我检查确认(基本上我是一个文本) 现在它不会崩溃,但它不保存在地址簿,任何线索? – user1044771
汇入vCard数据到iPhone的联系人列表做以下。
添加AddressbookUi.framework
添加Addressbook.framework
包含此头:
#include AddressBook/ABAddressBook.h>
#include AddressBook/ABRecord.h>
#include AddressBook/ABSource.h>
而调用这个函数:
-(void)importVcard {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *startPath = [paths objectAtIndex:0];
NSString *filename = @"contacts.vcf";
NSString *filePath = [NSString stringWithFormat:@"%@/%@",startPath,filename];
NSLog(@"File Path is %@",startPath);
NSString *vCardString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil ];
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);
}
你有没有迅速的版本? – user998405
“我是'新目标C'和我在我需要'紧急创建应用程序'的位置:“哦,我的天......哦,我的d .... – Oliver