iOS 6 Address Book not working?

前端 未结 4 1569
逝去的感伤
逝去的感伤 2020-12-03 00:19

My method of programmatically retrieving e-mail addresses from the Address Book no longer seems to work on iOS 6 devices. It worked in iOS 5 and oddly, still works in the iO

4条回答
  •  时光说笑
    2020-12-03 00:35

    I created a helper class, AddressBookHelper, to handle backward compatibility. Here are the guts:

    -(BOOL)isABAddressBookCreateWithOptionsAvailable {
        return &ABAddressBookCreateWithOptions != NULL;
    }
    
    -(void)loadContacts {
        ABAddressBookRef addressBook;
        if ([self isABAddressBookCreateWithOptionsAvailable]) {
            CFErrorRef error = nil;
            addressBook = ABAddressBookCreateWithOptions(NULL,&error);
            ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
                // callback can occur in background, address book must be accessed on thread it was created on
                dispatch_async(dispatch_get_main_queue(), ^{
                    if (error) {
                        [self.delegate addressBookHelperError:self];
                    } else if (!granted) {
                        [self.delegate addressBookHelperDeniedAcess:self];
                    } else {
                        // access granted
                        AddressBookUpdated(addressBook, nil, self);
                        CFRelease(addressBook);
                    }
                });
            });
        } else {
            // iOS 4/5
            addressBook = ABAddressBookCreate();
            AddressBookUpdated(addressBook, NULL, self);
            CFRelease(addressBook);
        }
    }
    
    void AddressBookUpdated(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) {
        AddressBookHelper *helper = (AddressBookHelper *)context;
        ABAddressBookRevert(addressBook);
        CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
    
        // process the contacts to return
        NSArray *contacts = ...    
    
        [[helper delegate] addressBookHelper:helper finishedLoading:contacts];
    };
    

提交回复
热议问题