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
{
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就是查詢到的結果