应用程序在iPhone中的dispatchqueue内崩溃

时间:2013-05-03 17:06:10

标签: ios grand-central-dispatch abaddressbook

在我的一个应用程序中,我正在使用dispatch_queue,在其中我声明了一个dispatch_asyc队列来检查地址簿。现在,当编译器进入return语句时,它会导致应用程序崩溃。以下是我的源代码。

   dispatch_queue_t queue = dispatch_queue_create("abc", NULL);

   dispatch_async(queue, ^{
       // Request authorization to Address Book
       ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
       if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
           ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
               // First time access has been granted...

               // All good.
               completionBlock?completionBlock(YES):nil;

               dispatch_async(queue, ^{
                   if (addressBookRef) {
                       CFRelease(addressBookRef);
                   };
               });

               return;
           });

1 个答案:

答案 0 :(得分:2)

根据documentation on Address Book,您不能跨线程使用ABAddressBookRef

  

重要:ABAddressBookRef的实例不能被使用   多线程。每个线程必须通过调用创建自己的实例   ABAddressBookCreate。

有关如何执行此操作的更多建议,请参阅this question