EXC_BAD_ACCESS при добавлении данных vCard в AddressBook - PullRequest
0 голосов
/ 30 ноября 2011

Я следую этой инструкции, чтобы добавить данные 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);

Ответы [ 2 ]

0 голосов
/ 02 мая 2012

Я рад, что вам удалось найти проблему, однако я просто подумал, что дам вам знать, что это не ARC, а утечка памяти.Вы переиздаете данные, которые ОС хочет выпустить самостоятельно. Вот объяснение.

Кроме того, отметьте вопрос как ответивший, чтобы помочь другим людям найти решение.Спасибо!

0 голосов
/ 01 декабря 2011

Я нашел проблему.

Проблема с последней строкой, возможно, из-за ARC.

CFRelease (книга);

Я прокомментировал строку, ипрограмма работает нормально.

...