添加vCard数据到AddressBook时EXC_BAD_ACCESS



在我的项目中,我按照此说明将vcard数据添加到地址簿。iOS 5。将vCard数据直接添加到系统地址簿

代码运行正常,并在我的ipad2和iphone4s中添加vcard数据到地址簿,然而,xcode显示此错误:

线程1程序收到信号:" exc_bad_access "

为什么出现这个错误?

编辑:代码添加。

NSString *vCardString = 
@"BEGIN:VCARDn"
@"N:Paulo;Joaon"
@"TEL:+44 (0)9999 8888n"
@"ADR;HOME:;;Flat 2, 43 Howitt Road, Belsize Park;London;;NW34LU;UKn"
@"ORG:NetTek Ltd;n"
@"TITLE:Consultantn"
@"EMAIL:none@none.comn"
@"URL:www.none.comn"
@"BDAY:19001010n"
@"END:VCARD";
CFDataRef vCardData = (__bridge 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);

我找到问题了。

问题出在最后一行,可能是因为ARC。

CFRelease(书);

我注释了这行,程序正常运行。

我很高兴你能找到这个问题,然而,我只是想让你知道这不是ARC的事情,而是内存泄漏的事情。你释放的数据超过了操作系统自己想要释放的数据。这里有一个解释。

此外,请将问题标记为已回答,以便您可以帮助其他人找到解决方案。谢谢你!

最新更新