ios - 应用程序在 iPhone 中的 dispatch_queue 内崩溃

标签 ios grand-central-dispatch abaddressbook

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

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

最佳答案

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

Important: Instances of ABAddressBookRef cannot be used by multiple threads. Each thread must make its own instance by calling ABAddressBookCreate.

参见 this question有关如何执行此操作的更多想法:

关于ios - 应用程序在 iPhone 中的 dispatch_queue 内崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364224/

相关文章:

ios - 过滤 [NSDictionary] 时,闭包错误无法使用类型为 'filter' 的参数列表调用 '((_) -> _)'

swift - Swift 命令行程序中的 CFRunLoop

objective-c - 使用dispatch_async时出现问题,无法在同一 Controller 上触发两个函数调用?

ios - 释放 ABAddressBookRef 时崩溃

ios - 在 iOS Objective-c 中粘在键盘上的自定义 UIView

ios - 使用 UIActivityViewController 导出 CocoaLumberjack 日志

ios - 如何在快速点击 UITableView 中的一行时获取联系号码(而不是姓名)

ios - AddressBook - iOS 应用程序崩溃,启用 ARC,接近 CF 对象操作

ios - swift 未转义的控制字符

objective-c - 如何加快 Mac 应用程序处理 5000 个独立任务的速度?