我遇到了 ABAddressBookGetPersonCount 返回 -1 的情况。测试人员向我保证地址簿中确实存在联系人。所有手机均运行 iOS 6.0.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 表示应用程序在这些设备上没有权限(或未知的权限状态)。
从文档中ABAddressBookRequestAccessCompletionHandler
:
CFErrorRef myError = NULL;
ABAddressBookRef myAddressBook = ABAddressBookCreateWithOptions(NULL, &myError);
APLViewController * __weak weakSelf = self; // avoid capturing self in the block
ABAddressBookRequestAccessWithCompletion(myAddressBook,
^(bool granted, CFErrorRef error) {
if (granted) {
NSArray *theSmiths = CFBridgingRelease(
ABAddressBookCopyPeopleWithName(myAddressBook,
CFSTR("Smith")
)
);
weakSelf.numberOfSmiths = [theSmiths count];
} else {
// Handle the error
}
});
CFRelease(myAddressBook);
如果您需要支持 iOS 5.x 或 4.x,您需要正确检查新方法是否存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)