我想将通讯录中的联系人检索到我的应用程序中。代码第一次安装有问题,下次安装正常。首次安装App,如果执行AddressBook代码,App挂起。执行 dispatch_semaphore_wait 行后,App 挂起。我重新启动了设备,这次 App 运行正常。如果它是第一次安装在新设备上,就会发生这种情况。我怎样才能解决这个问题?
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);
}