AddressBook からアプリに連絡先を取得したいと考えています。コードは最初のインストールで問題がありますが、次回以降は正常に動作しています。アプリの最初のインストールで、AddressBook コードが実行されると、アプリがハングします。dispatch_semaphore_wait 行の実行後、アプリがハングします。デバイスを再起動しましたが、今回はアプリは正常に動作します。新しいデバイスに最初にインストールした場合に発生しています。どうすればこれを修正できますか?
CFErrorRef * error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
__block BOOL isaccess = NO;
if(ABAddressBookRequestAccessWithCompletion != NULL) {
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
//ask to grand or deny access
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
isaccess = granted;
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);
}