【问题标题】:ABAddressBookSave causing a EXC_BAD_ACCESS ARC EnabledABAddressBookSave 导致 EXC_BAD_ACCESS ARC 已启用
【发布时间】:2013-12-06 19:23:24
【问题描述】:

我编写的代码一直有效,直到我尝试将保存移动到新线程。 在 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。

【问题讨论】:

    标签: ios objective-c abaddressbook


    【解决方案1】:

    这似乎是因为您无法在多个线程之间共享一个 ABAddressBookRef 实例(请参阅此Why would ABAddressbookRef need to be created for each thread?)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 2016-11-19
      • 2012-10-02
      • 2011-04-14
      • 2017-03-15
      相关资源
      最近更新 更多