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