2

iOS6 のドキュメントによると、ABAddressBookCreateWithOptions を使用してアドレス帳を作成する必要があります。

また、呼び出し元が db にアクセスできない場合、このメソッドは null を返します。

ただし、ABAddressBookRef をパラメーターとして受け取る ABAddressBookRequestAccessWithCompletion を呼び出すことによって、アクセスが要求されます。

したがって、ドキュメントによると、アクセス権がない場合、そもそも ABAddressBookRef を取得することはできませんが、アクセス権を取得するには、ABAddressBookRef をパラメーターとして渡す必要があります。

ええ。22をキャッチ?では、ABAddressBookRef をどのように作成しますか?

このためのいくつかの例/チュートリアルコードをグーグルで検索しましたが、何も見つかりませんでした.

ティア

4

2 に答える 2

4

私は次のようなコードを使用します:

if (ABAddressBookCreateWithOptions) {
    _book = ABAddressBookCreateWithOptions(NULL, NULL);
    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
        ABAddressBookRequestAccessWithCompletion(_book, ^(bool granted, CFErrorRef error) {
            dispatch_async(dispatch_get_main_queue(), ^{
                if (granted && !error) {
                    ABAddressBookRevert(_book);
                }
            });
        });
    }
} else {
    _book = ABAddressBookCreate();
}

_bookABAddressBookRef はどこにありますか。

私のアプリがアクセスを拒否された場合、_book は NULL になり、アドレス帳にアクセスできなくなります。

于 2012-10-24T17:34:28.077 に答える
0

ここで私の答えを参照してください:

https://stackoverflow.com/a/13671852/341994

ABAddressBookRequestAccessWithCompletionは役に立たないため、無視する必要があります。

  • 承認ステータスを知る必要がある場合は、に電話してABAddressBookGetAuthorizationStatusください。

  • 承認が決定されていない場合(ユーザーがこのアプリを実行したことがない場合)は、データベースへのアクセスを試みてください。これにより、認証アラートが表示されます。

  • ユーザーがアクセスを許可または拒否した場合、ABAddressBookRequestAccessWithCompletionは何の価値も持たないため、それを呼び出す意味はありません。

于 2012-12-02T17:41:37.683 に答える