El Capitan からすべての連絡先を取得しようとしていますが、そのために Contacts API を使用しています。連絡先を取得する方法は次のとおりです。
-(void)getAllContacts{
NSError* contactError;
//initialize the contact store
CNContactStore* addressBook = [[CNContactStore alloc]init];
//specify the fields I need
NSArray * keysToFetch =@[CNContactEmailAddressesKey, CNContactPhoneNumbersKey, [CNContactFormatter descriptorForRequiredKeysForStyle:CNContactFormatterStyleFullName]];
//establish the request with the above keys
CNContactFetchRequest * request = [[CNContactFetchRequest alloc]initWithKeysToFetch:keysToFetch];
//fetch all the contacts
BOOL success = [addressBook enumerateContactsWithFetchRequest:request error:&contactError usingBlock:^(CNContact * __nonnull contact, BOOL * __nonnull stop){
//I'm doing nothing here to try to isolate the problem, but even if I do something here, the problem remains
}];
//success is always true
//contactError is always nil
//5 or so seconds later, I see the error output to the console
}
派手なことは何もありませんが、このメソッドが実行されるたびに、5〜10秒後に次のエラーがコンソールに出力されます。
[Accounts] Failed to update account with identifier 72360D58-3D7H-49FC-1086-QRCIEQ8A991A0, error: Error Domain=ABAddressBookErrorDomain Code=1002 "(null)"
明示的にアカウントを更新しようとしているわけではありません。enumerateContactsWithFetchRequest
呼び出しを含めない場合、エラーは出力されません。連絡先リストが異なる複数の異なる Mac でこれを試しましたが、同じエラーが発生します。また、CNContactStore の承認ステータスがCNAuthorizationStatusAuthorized
を呼び出す前であることも確認していgetAllContacts
ます。
これは本当にイライラします。連絡先 API のバグではないかと疑い始めています。他の誰かがこの問題を見たことがありますか、それとも何が原因なのか考えていますか? 助けてくれてありがとう!
PS。セキュリティ上の懸念がある場合に備えて、エラー ステートメントでアカウントの ID を変更しました :)