无法在iOS 6上获取ABAddressBook(无隐私提示返回空数据库)
在某些设备上访问iOS 6上的用户通讯簿时遇到问题。奇怪的是,当我在自己的设备上测试时,它会工作 该应用程序从不提示用户访问通讯簿,并且我的应用程序未在其设备上的设置->隐私->联系人中列出(它在我的设备上) 这是我的密码,如果我做错了,请告诉我无法在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
- (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子类,其中包含您需要处理的联系人的信息,然后在后台队列中分派这些信息来做更复杂的事情(例如,发送到服务器写入磁盘)。谢谢,我通过删除分派队列解决了这个问题。不幸的是,它造成了一个问题,即通过通讯簿中的所有联系人进行循环会阻塞主线程,但我必须在某个时候进一步研究:)