【发布时间】:2012-12-12 02:40:29
【问题描述】:
有没有办法在用户的 iPhone 中获取对地址簿的引用,过滤掉所有不以字母“A”开头的联系人,然后显示过滤后的地址簿?这听起来可以通过 UITableView 实现,但是是否有一个特殊的视图可以包含所有地址簿功能?
【问题讨论】:
-
不,没有您可以访问的 UI,在几个答案中都举例说明了对数据的笨拙的编程访问
标签: iphone objective-c ios xcode cocoa
有没有办法在用户的 iPhone 中获取对地址簿的引用,过滤掉所有不以字母“A”开头的联系人,然后显示过滤后的地址簿?这听起来可以通过 UITableView 实现,但是是否有一个特殊的视图可以包含所有地址簿功能?
【问题讨论】:
标签: iphone objective-c ios xcode cocoa
要获取姓氏以 A 开头的所有人的数组,您可以使用以下内容:
ABAddressBook *ab = [ABAddressBook sharedAddressBook];
ABSearchElement *startsWithA =[ABPerson searchElementForProperty:kABLastNameProperty
label:nil key:nil
value:@"A"
comparison:kABPrefixMatchCaseInsensitive];
NSArray *peopleFound =
[ab recordsMatchingSearchElement:startsWithA];
一旦你得到一个数组,你就可以在任何你需要的自定义视图中使用它。
【讨论】:
此代码片段假定filteredPeople 是表视图的数据源,您要使用名称以A 开头的所有通讯簿联系人填充。
这个答案也应该对你有所帮助:Blank field showing up on iPhone AddressBook, how to debug?
Apple 还提供了有关“直接交互:以编程方式访问数据库”的大量详细信息,地址为 http://developer.apple.com/library/ios/#documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Chapters/DirectInteraction.html%23//apple_ref/doc/uid/TP40007744-CH6-SW1
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);
【讨论】: