0

私のプロジェクトでは、この指示に従って vcard データをアドレス帳に追加します。iOS 5. vCard データをシステムのアドレス帳に直接追加する

コードは正常に実行され、vcard データが ipad2 と iphone4s のアドレス帳に追加されますが、xcode で次のエラーが表示されます。

スレッド 1 プログラムがシグナルを受信しました: "exc_bad_acess"

このエラーが表示される理由

編集: コードを追加します。

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);
4

2 に答える 2

0

問題を見つけてよかったのですが、それはARCの問題ではなく、メモリリークの問題であることをお知らせしたいと思いました。OSがリリースしたいデータを過剰にリリースしています。これが説明です。

さらに、他の人が解決策を見つけるのを助けることができるように、質問に回答済みのマークを付けてください。ありがとうございました!

于 2012-05-02T18:28:37.157 に答える
0

問題が見つかりました。

問題は最後の行にあり、おそらく ARC が原因です。

CFRelease(本);

その行にコメントを付けたところ、プログラムは正常に実行されました。

于 2011-12-01T11:52:27.050 に答える