【问题标题】:EXC_BAD_ACCESS when add vCard data to AddressBook将 vCard 数据添加到地址簿时的 EXC_BAD_ACCESS
【发布时间】:2011-11-30 18:41:23
【问题描述】:

我按照此说明在我的项目中将 vcard 数据添加到地址簿。 iOS 5。 Adding vCard data directly to the system Address Book

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

线程 1 程序收到信号:“exc_bad_access”

为什么会出现这个错误?

编辑:代码添加。

NSString *vCardString = 
@"BEGIN:VCARD\n"
@"N:Paulo;Joao\n"
@"TEL:+44 (0)9999 8888\n"
@"ADR;HOME:;;Flat 2, 43 Howitt Road, Belsize Park;London;;NW34LU;UK\n"
@"ORG:NetTek Ltd;\n"
@"TITLE:Consultant\n"
@"EMAIL:none@none.com\n"
@"URL:www.none.com\n"
@"BDAY:19001010\n"
@"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);

【问题讨论】:

  • 当您尝试访问已释放的内存时会出现此错误。打印一些代码以获取更多详细信息。
  • 我使用的代码和链接是一样的,没有这个代码,我的项目运行正常。

标签: iphone ipad ios5 objective-c-2.0 vcf-vcard


【解决方案1】:

我发现了问题。

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

CFRelease(书);

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

【讨论】:

    【解决方案2】:

    很高兴您能够找到问题所在,但是,我只是想让您知道这不是 ARC 问题,而是内存泄漏问题。您过度发布了操作系统想要自行发布的数据。 Here's an explanation.

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

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      相关资源
      最近更新 更多