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