如何获取重复的联系人列表iOS并合并或删除联系人?

时间:2016-10-13 09:40:49

标签: objective-c merge duplicates contact addressbook

我想删除重复或合并重复的联系人可以anyOne为我提供示例代码!!!!! 我想在tableview中获取重复联系人列表并合并或删除它们

1 个答案:

答案 0 :(得分:5)

我为你创建了示例项目。我得到了解决方案。它完美运行。

  

从iOS 9不推荐使用Addressbook框架。因此我们需要使用Contact框架。

我们必须导入联系框架

  

下一个plist如果你想访问联系人,你必须得到   授权权限,因此您需要添加隐私 - 联系人使用   说明

     

密钥是隐私 - 联系人使用说明
  类型是字符串
  值是联系人(无论你想在这里添加什么字符串)

ViewController.h

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

@interface ViewController :  UIViewController<UISearchBarDelegate,UITableViewDataSource,UITableViewDelegate>

@property (strong, nonatomic) IBOutlet UITableView *tblViewContact;
@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()
{
    NSMutableArray *arrData;
    NSMutableArray *arraySearchContactData;
}

@end

@implementation ViewController

@synthesize tblViewContact;

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

 //Get Contact and Authorization Access

-(void)getContact
{
    // 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];
        NSMutableArray *arrContacts = [[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];
            [arrContacts addObject:[NSString stringWithFormat:@"%@",[personDict objectForKey:@"fullName"]]];
        }
        //Removing Duplicate Contacts from array
        NSOrderedSet *orderedSet = [NSOrderedSet orderedSetWithArray:arrContacts];
        NSArray *arrayWithoutDuplicates = [orderedSet array];
        arrData = [arrayWithoutDuplicates mutableCopy];
        NSLog(@"The contacts are - %@",arrData);
        dispatch_async(dispatch_get_main_queue(), ^{
            [tblViewContact 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  arrData.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 = arrData[indexPath.row];
   return cell;
 }

联系人的打印结果

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

下面的截图

首次运行应用时

enter image description here

现在它在表格视图中显示联系人

enter image description here