有没有办法在用户的iPhone中获取对地址簿的引用,过滤掉所有不以字母“A”开头的联系人,然后显示该过滤后的地址簿?使用UITableView听起来很有可能,但是有一个特殊的视图,它带有所有的地址簿功能吗?
答案 0 :(得分:2)
要获取姓氏以A开头的所有人的数组,您可以使用以下内容:
ABAddressBook *ab = [ABAddressBook sharedAddressBook];
ABSearchElement *startsWithA =[ABPerson searchElementForProperty:kABLastNameProperty
label:nil key:nil
value:@"A"
comparison:kABPrefixMatchCaseInsensitive];
NSArray *peopleFound =
[ab recordsMatchingSearchElement:startsWithA];
获得数组后,您可以在任何需要的自定义视图中使用它。
答案 1 :(得分:0)
此代码片段假定filteredPeople是要用名称以A开头的所有地址簿联系人填充的表视图的dataSource。
这个答案对你也有帮助:Blank field showing up on iPhone AddressBook, how to debug?
上提供了有关“直接互动:以编程方式访问数据库”的详细信息 ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(
kCFAllocatorDefault,
CFArrayGetCount(people),
people
);
NSMutableArray *allNames = (NSMutableArray*)peopleMutable;
filteredPeople = [[NSMutableArray alloc] init ];
for (id person in allNames) {
NSMutableString *firstName = [(NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty) autorelease];
if ([firstName length] > 0){
NSString* firstChar = [firstName substringToIndex:1];
if ([firstChar isEqualToString:@"A"] || [firstChar isEqualToString:@"a"]){
[filteredPeople addObject:person];
}
}
}
[self.theTableView reloadData];
CFRelease(addressBook);
CFRelease(people);
CFRelease(peopleMutable);