ABAddressBookGetPersonCount가 -1을 반환하는 상황에 처해 있습니다. 테스터는 주소록에 연락처가 있는지 확인합니다. 모든 핸드셋은 iOS 6.0.1을 실행 중입니다.ABAddressBookGetPersonCount는 iOS에서 -1을 반환합니다.
여기에 코드입니다 :
NSMutableDictionary *myAddressBook = [[NSMutableDictionary alloc] init];
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
int numEntries = ABAddressBookGetPersonCount(addressBook);
if (numEntries == 0)
{
NSString *title = NSLocalizedString(@"error", nil);
NSString *description = NSLocalizedString(@"error_empty_contacts", nil);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message:description
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
return;
}
NSLog(@"emails: found %d", numEntries);
내 휴대폰의에이 문제를 재현 할 수 아니지만, 테스터는 3 개 단말기에 노력하고 있습니다. 그것은 iPhone 5에서는 제대로 작동하지만 4 또는 3에서는 제대로 작동하지 않습니다.
값이 -1 인 것을 나타내는 문서를 찾을 수 없습니다. 나는 그것이 어떤 종류의 오류라고 가정하고 있지만, 무엇?
사용자가 아직 앱을 처음 시작할 때 개인 정보 보호 프롬프트에서 옵션을 탭하지 않은 경우 iOS 6에서도 -1이 표시됩니다. 이 경우 ABAddressBookCreateWithOptions는 유효한 주소록을 반환하지만 ABAddressBookGetPersonCount는 -1을 반환합니다. 사용자가 액세스를 허용하거나 거부하면 ABAddressBookCreateWithOptions가 실제 주소록 또는 null을 반환합니다. 사용자가 액세스 권한을 부여했는지 여부를 감지하기 위해 -1 반환을 사용하고 있습니다. – Nicholas
@Nicholas 확인하는 적절한 방법은'ABAddressBookGetAuthorizationStatus' 함수를 호출하고 반환 값을 확인하는 것입니다. – rmaddy
감사합니다. @rmaddy. 이전에 시도했지만 신뢰할 수있는 데이터를 얻을 수 없었습니다. 이제는 어떻게 작동하는지, 테스트하는 방법에 대해 더 많이 알게되었으므로 내가 알아야 할 것을 제공하는 것 같습니다. 그러나 ABAddressBookGetPersonCount의 -1에 대한 대답은 여전히 유효합니다. 문서화되지는 않았지만 ABAddressBookGetAuthorizationStatus가 kABAuthorizationStatusNotDetermined을 반환하면 -1이 반환된다는 것이 확실합니다. – Nicholas