Как загрузить все контакты в массиве ios9
AddressBook
API устарел в IOS 9. Я хочу загрузить все контакты в массиве и отобразить его в UITableView
, Я не хочу использовать iOS по умолчанию ContactPicker
как я должен сделать некоторые настройки при отображении. Как загрузить весь список контактов в массив для дальнейшего использования?
1 ответ
Сначала я должен был проверить идентификатор разрешения, который не определен, а затем запросить разрешение на доступ к контактам. Как это:
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 очень помогло.