0

我无法在某些设备上访问 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);
                });
            }
        });
    });
}
4

1 回答 1

1

我会避免将所有内容分派到后台队列中。如果里面的东西// ... do stuff ...很慢,我会考虑创建 NSObject-Sublasses,其中包含您需要处理的联系人信息,然后将这些信息分派到后台队列中执行更复杂的事情(例如发送到服务器写入磁盘)。 ..

于 2012-11-08T17:46:42.203 回答