ABAddressBookSave, вызывающий EXC_BAD_ACCESS ARC Enabled

Код, который я написал, работал, пока я не попытался переместить сохранение в новый поток. в ViewController.h я назначил ABAddressBookRef:

ViewController.h

ABAddressBookRef addressBook;

и в файле ViewController.m создан объект адресной книги

ViewController.m
addressBook = ABAddressBookCreateWithOptions(NULL, anError);
/// ... getting a person name and modify it. the code is OK. tested before the NSThread thing
NSThread *saveThread = [[NSThread alloc] initWithTarget:self selector:@selector(saveAddressBook:) object:(__bridge id)addressBook];                     
[saveThread start];

и метод saveThread:

- (void)saveAddressBook:(id)ab
{
    bool didSave;   
    CFErrorRef error = NULL;

    didSave = ABAddressBookSave((__bridge ABAddressBookRef)ab, &error);
    if (didSave) { NSLog(@"Saved.");}

}

Строка ABAddressBookSave приводит к сбою приложения:

Тема 6: EXC_BAD_ACCESS (код = 1, адрес = 0x65504289)

Я знаю, что ошибка связана с ошибкой памяти, но я не могу ничего выпустить, так как использую ARC.


person Hadi Sharghi    schedule 06.12.2013    source источник


Ответы (1)


Похоже, это связано с тем, что вы не можете совместно использовать экземпляр ABAddressBookRef в нескольких потоках (см. -each-thread">Зачем создавать ABAddressbookRef для каждого потока?).

person jyotsna    schedule 06.12.2013