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 に答える