2013-04-02 1 views
2

주소록 데이터베이스에서 연락처를 가져 오는 응용 프로그램을 개발했습니다. 이를 위해 구현 된 코드는 iOS 버전 6.0에서는 괜찮지 만 iOS 6.1.3에서는 충돌합니다.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; 
} 

이 저를 도와주세요.

+0

아이폰 OS 6.1.3에서 실행해야한다고 생각 어떻게 충돌에 대한 몇 가지 세부 사항을 추가하는 방법에 대한? 예 : 문제가 무엇인지 알 수 있도록 상징화 된 충돌 보고서. 이걸 수수께끼가되고 싶지 않다고 생각해? :) – Kerni

+0

DB에서 데이터를 가져 오는 동안 ios 버전 6.1.3에 대해 항상 null을 반환합니다. –

답변

0

이 코드가 충돌합니다 모르겠어요 여부를하지만 난이

-(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]; 
} 
}