首页 > 代码库 > IOS 通讯录的模糊查询

IOS 通讯录的模糊查询

1、首先拿到通讯录

-(void)ReadAllPeoples

{

    [contactsremoveAllObjects];

    ABAddressBookRef addressBook =ABAddressBookCreateWithOptions(nil,nil);

    dispatch_semaphore_t sema =dispatch_semaphore_create(0);

    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted,CFErrorRef error)

                                             {

                                                dispatch_semaphore_signal(sema);

                                             });

    

    dispatch_semaphore_wait(sema,DISPATCH_TIME_FOREVER);

    CFArrayRef results =ABAddressBookCopyArrayOfAllPeople(addressBook);

    

   for(int i =0; i < CFArrayGetCount(results); i++)

    {

       ABRecordRef person = CFArrayGetValueAtIndex(results, i);

        NSString *lastname = (__bridgeNSString*)ABRecordCopyValue(person,kABPersonLastNameProperty);

       NSLog(@"lastname:%@",lastname);

        

        ABMultiValueRef phone =ABRecordCopyValue(person,kABPersonPhoneProperty);

//读取联系人信息

       for (int k =0; k<ABMultiValueGetCount(phone); k++)

        {

            

           NSString * personPhone = (__bridgeNSString*)ABMultiValueCopyValueAtIndex(phone, k);

           if (lastname == nil) {

                lastname =@"";


            }

           if (person == nil) {

               continue;

            }

//此句为存储结构,contacts为NSMutableArray*

            [contactsaddObject:@[lastname,personPhone]];


        }

    }

    

   CFRelease(results);

   CFRelease(addressBook);

    [self.tableViewreloadData];

}

2、对姓名(lastname)和手机号(personPhone)的模糊查询

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self[0] contains [cd] %@||self[1] contains [cd] %@",用户输入的string,用户输入string];

            filterData =  [[NSArrayalloc] initWithArray:[contactsfilteredArrayUsingPredicate:predicate]];

filterData就是查询到的结果


IOS 通讯录的模糊查询