0

特定のデバイスの iOS 6 でユーザーのアドレス帳にアクセスできません。奇妙なことに、自分のデバイスでテストすると機能します。

アプリはユーザーにアドレス帳へのアクセスを要求することはなく、私のアプリはデバイスの [設定] -> [プライバシー] -> [連絡先] にリストされていません (それは私のものです)。

これが私のコードです。何か間違っているかどうか教えてください。

- (void)addressBookWithCompletion:(void (^)(NSArray *addressBook, NSError *error))completion {
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
    dispatch_async(queue, ^{
        CFErrorRef error = NULL;
        ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            if (error || !granted) {
                NSLog(@"%@", error);
                dispatch_async(dispatch_get_main_queue(), ^{
                    completion(nil, (__bridge NSError *)(error));
                });
            } else {
                CFArrayRef allContacts = ABAddressBookCopyArrayOfAllPeople(addressBook);
                // ... do stuff ... 
                CFRelease(addressBook);
                dispatch_async(dispatch_get_main_queue(), ^{
                    completion(arrayOfContacts, nil);
                });
            }
        });
    });
}
4

1 に答える 1

1

すべてをバックグラウンド キューにディスパッチすることは避けます。内部で何か// ... do stuff ...が遅い場合は、作業が必要な連絡先からの情報を含む NSObject-Sublasses の作成を検討し、それらをディスパッチしてバックグラウンド キューでより複雑な処理を実行します (サーバーへのディスクへの書き込みなど)。 ..

于 2012-11-08T17:46:42.203 に答える