AddressBook
api 在 ios 9 中已弃用。我想将所有联系人加载到数组中并将其显示在UITableView
. 我不想使用 iOS 默认设置ContactPicker
,因为我必须在显示时进行一些自定义。如何将所有联系人列表加载到数组中以供进一步使用?
问问题
1017 次
1 回答
1
首先,我必须检查未定义的权限 ID,然后请求访问联系人的权限。像这样:
CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
if (status == CNAuthorizationStatusNotDetermined) {
[self.contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError *error) {
if (granted) {
[self loadUserListFromPhoneBook];
}
}];
}
else if(status == CNAuthorizationStatusAuthorized) {
[self loadUserListFromPhoneBook];
}
之后,我不得不遍历联系人列表并像这样加载所有联系人:
-(void) loadUserListFromPhoneBookFor
{
NSMutableArray *contacts = [NSMutableArray array];
NSError *error;
CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:@[CNContactIdentifierKey, [CNContactFormatter descriptorForRequiredKeysForStyle:CNContactFormatterStyleFullName]]];
BOOL success = [self.contactStore enumerateContactsWithFetchRequest:request error:&error usingBlock:^(CNContact *contact, BOOL *stop) {
[contacts addObject:contact];
}];
if (!success) {
NSLog(@"error = %@", error);
}
CNContactFormatter *formatter = [[CNContactFormatter alloc] init];
for (CNContact *contact in contacts) {
NSString *string = [formatter stringFromContact:contact];
NSLog(@"contact = %@", string);
}
}
您可以使用必要的密钥来获取更多信息。看看这个以获取更多信息。它具有所有新的联系类别。WWDC 的这段视频帮助很大。
于 2015-10-26T12:32:10.793 回答