从iOS版本6.1.3的地址簿数据库中获取联系人时崩溃?

时间:2013-04-02 13:39:08

标签: ios ios6 contacts abaddressbook

我开发了从地址簿数据库中获取联系人的应用程序。为此,实现的代码适用于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;
}

请帮助我。

1 个答案:

答案 0 :(得分: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];
}
}