2

我已经开发了从通讯录数据库中获取联系人的应用程序。为此,实现的代码对于 iOS 6.0 版来说是正常的,但它在 iOS 6.1.3 上会崩溃。

我已经实现从通讯簿数据库中获取联系人的代码:

ABAddressBookRef addressBook;

if ([self isABAddressBookCreateWithOptionsAvailable]) {
    // iOS 6
    CFErrorRef error = nil;
    addressBook = ABAddressBookCreateWithOptions(NULL,&error);
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { });
    ABAddressBookRevert(addressBook);
} else {
    // iOS 4/5
    addressBook = ABAddressBookCreate();
}

-(BOOL)isABAddressBookCreateWithOptionsAvailable
{
    return &ABAddressBookCreateWithOptions != NULL;
}

请帮我解决一下这个。

4

1 回答 1

0

我不确定这段代码是否会崩溃,但我认为这应该在 iOS 6.1.3 中运行

-(IBAction)btnShowContactClicked {
//ABAddressBookRef addressBook = ABAddressBookCreate();
CFErrorRef *aberror = NULL;
addressBook = ABAddressBookCreateWithOptions(NULL, aberror);
__block BOOL accessGranted = NO;

if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);

    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
        accessGranted = granted;
        dispatch_semaphore_signal(sema);
    });

    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
    dispatch_release(sema);
}
else { // we're on iOS 5 or older
    accessGranted = YES;
}

if (accessGranted) {
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController  alloc] init];
    picker.peoplePickerDelegate = self;
    [self presentViewController:picker animated:YES completion:nil];
    //  //[self.navigationController presentModalViewController:picker animated:YES];
    [picker release];
}
}
于 2013-04-20T13:00:00.763 回答