2016-07-09 3 views
4

Я использую ниже код для доступа к контактам в приложении iOS. Он работает отлично в прошивке < 10, но с Xcode 8 и прошивкой 10 он выходит из строя:ABAddressBookRequestAccessWithCompletion crashes on iOS 10

- (void)btcContacts_tap { 
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { 
     if (granted) { 
      _addressBookController = [[ABPeoplePickerNavigationController alloc] init]; 

      [[_addressBookController navigationBar] setBarStyle:UIBarStyleBlack]; 

      _addressBookController.delegate = self; 
      [_addressBookController setPredicateForEnablingPerson:[NSPredicate predicateWithFormat:@"%[email protected] > 0", ABPersonPhoneNumbersProperty]]; 
      [_addressBookController setPeoplePickerDelegate:self]; 
      [self presentViewController:_addressBookController animated:YES completion:nil]; 
     } 
     else { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [self showMessage:NSLocalizedStringFromTable(@"PLEASE_GRANT_CONTACTS", LIApplicationLanguage(), nil) andAdvertise:@"" andService:nil andTransactionState:kTTTransactionStateInfo]; 
      }); 
     } 
    }); 
} 

Я поставил NSSetUncaughtExceptionHandler к способу регистрации отчета об аварии, но даже обработчик исключений не называет ...

Неужели кто-то еще сталкивался с этой проблемой?

+1

Husein устарел от iOS 9. Вы не можете использовать это. Вы должны использовать Contact framework. – user3182143

+0

Если вы хотите сделать приложение с картой контактов, я помогу вам. Я напишу ответ, используя структуру контактов. – user3182143

ответ

21

IOS 10:

Вы должны поместить NSContactsUsageDescription в вашем PLIST. Нравится:

<key>NSContactsUsageDescription</key> 
<string>$(PRODUCT_NAME) uses photos</string> 

Просмотреть все описания пользования here.

+0

Действительно помог мне .. Спасибо –

+0

Сообщение об ошибке xcode, указывающее, что это было бы здорово. Спасибо, что решили! – jwhat