私のアプリでは、これを行うことで連絡先情報を直接購入しています...
ABAddressBookRef m_addressbook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook);
CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook);
for (int i=0;i < nPeople;i++)
{
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i);
CFStringRef company,firstName,lastName;
firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty);
company = ABRecordCopyValue(ref, kABPersonOrganizationProperty);
}
だから、私は最初にこれがオン/オフかどうかを確認する必要があります 設定 --> プライバシー --> 私のアプリの連絡先のオン/オフ。
このために私はこれをやっています:
__block BOOL accessGranted = NO;
float sysver = [[[UIDevice currentDevice]systemVersion]floatValue];
if(sysver>=6) {
ABAddressBookRef addressBook = ABAddressBookCreate();
if (ABAddressBookRequestAccessWithCompletion != NULL) {
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 {
accessGranted = YES;
}
} else {
accessGranted = YES;
}
if(accessGranted)
{
// doing my stuff and moving on
} else {
// please make Settings --> Privacy --> Contacts my app. ON for accessing contacts.
}
私の問題は、デバイスにアプリをインストールした後の最初の時点で、アプリが連絡先の許可アクセスに対して「許可しない」/「OK」アラートを要求したことです。[OK] をクリックしましたが、[設定] --> [プライバシー] --> [自分のアプリの連絡先] がオフだったので、再度 [設定] を選択して [OK] を選択し、[設定] を選択して [オン] にしました。アプリはコンソールに SIGKILL 何も取得しません。
その後、プライバシー設定をオフからオンに変更すると、アプリがバックグラウンドでクラッシュします。私はコンソールにSIGKILL何も取得しません。
前もって感謝します。