8

私のアプリでは、これを行うことで連絡先情報を直接購入しています...

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何も取得しません。

前もって感謝します。

4

1 に答える 1