-1

How can I import all the contacts from the phone book in your application. and so that we could gain the imported contacts.

Andrei Trotsko
  • 347
  • 2
  • 12
  • 2
    Andrei see this perfect answer http://stackoverflow.com/questions/38261248/how-to-impliment-search-bar-in-table-view-for-contacts-in-ios/38264318#38264318 – user3182143 Aug 14 '16 at 08:11
  • 1
    Also see this answer http://stackoverflow.com/questions/35595631/display-all-contacts-from-the-ios-device-in-custom-table-viewcontoller-when-cont/35603499#35603499 – user3182143 Aug 14 '16 at 08:23
  • 1
    I have given the tried and worked solution there.Both will work perfectly. – user3182143 Aug 14 '16 at 08:25
  • @user3182143 ok, i can try – Andrei Trotsko Aug 14 '16 at 08:45
  • Andrei brother check my answer – user3182143 Aug 15 '16 at 06:50
  • Possible duplicate of [How to Impliment Search bar in Table view for Contacts in ios](http://stackoverflow.com/questions/38261248/how-to-impliment-search-bar-in-table-view-for-contacts-in-ios) –  Mar 06 '17 at 18:44

1 Answers1

0

Andrei brother if you have not got answer still,I give you answer.I tried and got the solution.It works fine.

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

First I set or hook up the tableView using XIB or Storyboard for showing contacts.

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 printed results of Contacts are

 The contacts  are - (
 "John Appleseed",
 "Kate Bell",
 "Anna Haro",
 "Daniel Higgins",
 "David Taylor",
 "Hank Zakroff"
 )
user3182143
  • 9,459
  • 3
  • 32
  • 39