无法在iOS 6上获取ABAddressBook(无隐私提示返回空数据库)

无法在iOS 6上获取ABAddressBook(无隐私提示返回空数据库),ios,ios6,abaddressbook,core-foundation,Ios,Ios6,Abaddressbook,Core Foundation,在某些设备上访问iOS 6上的用户通讯簿时遇到问题。奇怪的是,当我在自己的设备上测试时,它会工作 该应用程序从不提示用户访问通讯簿,并且我的应用程序未在其设备上的设置->隐私->联系人中列出(它在我的设备上) 这是我的密码,如果我做错了,请告诉我 - (void)addressBookWithCompletion:(void (^)(NSArray *addressBook, NSError *error))completion { dispatch_queue_t queue = di

在某些设备上访问iOS 6上的用户通讯簿时遇到问题。奇怪的是,当我在自己的设备上测试时,它会工作

该应用程序从不提示用户访问通讯簿,并且我的应用程序未在其设备上的设置->隐私->联系人中列出(它在我的设备上)

这是我的密码,如果我做错了,请告诉我

- (void)addressBookWithCompletion:(void (^)(NSArray *addressBook, NSError *error))completion {
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
    dispatch_async(queue, ^{
        CFErrorRef error = NULL;
        ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            if (error || !granted) {
                NSLog(@"%@", error);
                dispatch_async(dispatch_get_main_queue(), ^{
                    completion(nil, (__bridge NSError *)(error));
                });
            } else {
                CFArrayRef allContacts = ABAddressBookCopyArrayOfAllPeople(addressBook);
                // ... do stuff ... 
                CFRelease(addressBook);
                dispatch_async(dispatch_get_main_queue(), ^{
                    completion(arrayOfContacts, nil);
                });
            }
        });
    });
}

我会避免将所有内容都分派到后台队列中。如果
//中有什么东西。。。做一些事情…
很慢,我会考虑创建NSObject子类,其中包含您需要处理的联系人的信息,然后在后台队列中分派这些信息来做更复杂的事情(例如,发送到服务器写入磁盘)。

谢谢,我通过删除
分派队列解决了这个问题。不幸的是,它造成了一个问题,即通过通讯簿中的所有联系人进行循环会阻塞主线程,但我必须在某个时候进一步研究:)