Search code examples
iosobjective-ccncontact

I have fetched the contact using cncontacts and able to display them on console screen, but not on table view


How to display contact in table view?

I have fetched the contacts via CNContactStore iOS 9.

- (void) getContacts {
    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 *cnContactsarray = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&error];   
            if (error) {
                NSLog(@"error fetching contacts %@", error);
                        }
            else {
                    for (CNContact *contact in cnContactsarray) {
                    //store all the contacts as per your requirement
                    NSLog(@"Name       :     %@",contact.givenName);
                    NSLog(@"Id         :     %@",contact.identifier);//the contact id which you want
                        [_ContactsCN addObject:contact];
                                  }


            }
            NSLog(@"array %@",_ContactsCN);
        }
    }];
}

Any help will be appreciated.


Solution

  • You need to reload data on main thread when your fetch contact from CNContact is complete

    to run on main thread

    dispatch_async(dispatch_get_main_queue(), ^{// reload your table here 
    });