1

私のアプリは Address Book フレームワークを使用しています。iOS 6 以降ですべての連絡先を表示するには、アクセス許可を設定する必要があります。

初めてシミュレーターでアプリを実行したときに、以下のアラートが表示されましたが、もう一度表示しようとすると、アラートがもう一度表示されません。

ここに画像の説明を入力

コンテンツと設定をリセットしましたが、解決しません。そのため、アプリを再実行すると常に連絡先が表示されますが、最初はシミュレーターをリセットしたときにアプリにアラートを表示する必要があります。この問題に直面した人はいますか?

以下のコード:

- (void)getPersonOutOfAddressBook
{

    if (self.tableData) {
        [self.tableData removeAllObjects];
    }

    ABAddressBookRef addressBook = ABAddressBookCreate();    

    __block BOOL accessGranted = NO;
    if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
        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
    {
        // we're on iOS 5 or older
        accessGranted = YES;
    }

    if (accessGranted)
    {        
        if (addressBook != nil)
        {
            NSLog(@"Succesful.");

            NSArray *allContacts = (__bridge_transfer NSArray
                                    *)ABAddressBookCopyArrayOfAllPeople(addressBook);
            NSUInteger i = 0;
            for (i = 0; i < [allContacts count]; i++)
            {
                Contact *contact = [[Contact alloc] init];

                ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];
                NSString *firstName = (__bridge_transfer NSString
                                       *)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);
                NSString *lastName =  (__bridge_transfer NSString
                                       *)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty);
                NSString *fullName = [NSString stringWithFormat:@"%@ %@",
                                      firstName, lastName];

                NSData  *imgData = (__bridge NSData *)ABPersonCopyImageData(contactPerson);

                contact.firstName = firstName;
                contact.lastName = lastName;
                contact.fullName = fullName;
                contact.image = [UIImage imageWithData:imgData];

                [self.tableData addObject:contact];
            }

            CFRelease(addressBook); 
        }
    }    
}
4

1 に答える 1

1

私の経験では、デバイスにアプリをインストールすると、何かを許可するかどうかを尋ねられます。削除して再度インストールすると、再度尋ねられることはありません。たとえば、アプリはプッシュ メッセージを有効または無効にすることを知りたがっています。はい、有効にしてから、デバイスからアプリを削除し、再度ダウンロードしてインストールすると、再度尋ねられることはありません。設定に自動的に表示されます。アドレス帳も同じように機能しますが、よくわかりません。GPS は同じではありません。アプリケーションは常に位置情報を有効にするよう求めてきます。

于 2013-09-16T13:41:36.450 に答える