IOS 通讯录的模糊查询

1、首先拿到通讯录

-(void)ReadAllPeoples

{

    [contacts removeAllObjects];

    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 = (__bridge NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty);

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

        

        ABMultiValueRef phone = ABRecordCopyValue(person, kABPersonPhoneProperty);

//读取联系人信息

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

        {

            

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

            if (lastname == nil) {

                lastname = @"";


            }

            if (person == nil) {

                continue;

            }

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

            [contacts addObject:@[lastname,personPhone]];


        }

    }

    

    CFRelease(results);

    CFRelease(addressBook);

    [self.tableView reloadData];

}

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

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

            filterData =  [[NSArray alloc] initWithArray:[contacts filteredArrayUsingPredicate:predicate]];

filterData就是查询到的结果


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。