我如何将所有 phone 联系人添加到 tableView

How i can add all phone contact to tableView

如何从您的应用程序中的 phone 书中导入所有联系人。这样我们就可以获得导入的联系人。

Andrei 兄弟,如果你还没有得到答案,我给你answer.I 试了一下,solution.It 很好

The AddressBookUI framework is deprecated in iOS 9, so we need to use Contact Framework.

首先,我使用 XIB 或 Storyboard 设置或连接 tableView 以显示联系人。

Must import the Contacts framework

ViewController.h

#import <UIKit/UIKit.h>
#import <Contacts/Contacts.h> 

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>
{
}
@property (strong, nonatomic) IBOutlet UITableView *tableViewShowContacts;
@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()
{
   NSMutableArray *arrayContacts;
}
@end
@implementation ViewController
@synthesize tableViewShowContacts;



- (void)viewDidLoad 
{
   [super viewDidLoad];
   // Do any additional setup after loading the view, typically from a nib.
   arrayContacts = [[NSMutableArray alloc]init];
   [self getAuthorizationandContact];
   //Register the cell
   [tableViewContactData registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
   [self.view addSubview:tableViewShowContacts];
}

-(void)fetchContactsandAuthorization
{
    // Request authorization to Contacts
   CNContactStore *store = [[CNContactStore alloc] init];
   [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
   if (granted == YES)
   {
      //keys with fetching properties
      NSArray *keys = @[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey];
      NSString *containerId = store.defaultContainerIdentifier;
      NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId];
      NSError *error;
      NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&error];
      if (error) {
        NSLog(@"error fetching contacts %@", error);
      } else {
        NSString *phone;
        NSString *fullName;
        NSString *firstName;
        NSString *lastName;
        UIImage *profileImage;
        NSMutableArray *contactNumbersArray = [[NSMutableArray alloc]init];
        for (CNContact *contact in cnContacts)
        {
            // copy data to my custom Contacts class.
            firstName = contact.givenName;
            lastName = contact.familyName;
            if (lastName == nil) {
                fullName=[NSString stringWithFormat:@"%@",firstName];
            }else if (firstName == nil){
                fullName=[NSString stringWithFormat:@"%@",lastName];
            }
            else{
                fullName=[NSString stringWithFormat:@"%@ %@",firstName,lastName];
            }
            UIImage *image = [UIImage imageWithData:contact.imageData];
            if (image != nil) {
                profileImage = image;
            }else{
                profileImage = [UIImage imageNamed:@"person-icon.png"];
            }
            for (CNLabeledValue *label in contact.phoneNumbers)
            {
                phone = [label.value stringValue];
                if ([phone length] > 0) {
                    [contactNumbersArray addObject:phone];
                }
            }
            NSDictionary* personDict = [[NSDictionary alloc] initWithObjectsAndKeys: fullName,@"fullName",profileImage,@"userImage",phone,@"PhoneNumbers", nil];
            [arrayContacts addObject:[NSString stringWithFormat:@"%@",[personDict objectForKey:@"fullName"]]];
            NSLog(@"The contacts are - %@",arrayContacts);
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            [tableViewShowContacts reloadData];
        });
      }
    }
 }];
}

- (void)didReceiveMemoryWarning
{
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}


 #pragma mark - UITableView Data Source Methods

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 {
    return 1;
 }

 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
    return  arrayContacts.count;
 }

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    static  NSString *strCell = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:strCell];
    if(cell==nil)
    {
      cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:strCell];
    }
    cell.textLabel.text = arrayContacts[indexPath.row];
    return cell;
 }

通讯录打印结果为

 The contacts  are - (
 "John Appleseed",
 "Kate Bell",
 "Anna Haro",
 "Daniel Higgins",
 "David Taylor",
 "Hank Zakroff"
 )