我的应用需要获取通讯录中有电子邮件的联系人的姓名和电子邮件地址,并在表格视图中列出它们。
是否可以创建包含名称和电子邮件字段的用户对象,这些字段由手机的通讯录填充,然后将这些对象放入表格视图中?
任何提示将不胜感激。
我的应用需要获取通讯录中有电子邮件的联系人的姓名和电子邮件地址,并在表格视图中列出它们。
是否可以创建包含名称和电子邮件字段的用户对象,这些字段由手机的通讯录填充,然后将这些对象放入表格视图中?
任何提示将不胜感激。
你需要遵循的方法是:
首先,你需要获取AddressBook的引用,然后将所有联系人的引用存储在一个数组中。接着,你需要枚举该数组并检查它们的电子邮件属性是否为nil,如果不为nil,则将该联系人添加到另一个数组中,并将该数组用作tableView的数据源 :)
如果需要,我可以提供检查AddressBook中联系人电子邮件输入并过滤这些联系人的代码。
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook);
CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook);
for (int i=0;i < nPeople;i++) {
NSMutableDictionary *dOfPerson=[NSMutableDictionary dictionary];
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i);
//For username and surname
ABMultiValueRef phones =(NSString*)ABRecordCopyValue(ref, kABPersonPhoneProperty);
CFStringRef firstName, lastName;
firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty);
[dOfPerson setObject:[NSString stringWithFormat:@"%@ %@", firstName, lastName] forKey:@"name"];
//For Email ids
ABMutableMultiValueRef eMail = ABRecordCopyValue(ref, kABPersonEmailProperty);
if(ABMultiValueGetCount(eMail) > 0) {
[dOfPerson setObject:(NSString *)ABMultiValueCopyValueAtIndex(eMail, 0) forKey:@"email"];
}
借助此函数,您可以确定联系人是否有电子邮件地址,如果有,则可以将该联系人引用添加到其他数组中 :) 希望这有所帮助 :)
您可以通过此链接进行访问 - http://developer.apple.com/library/ios/#documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Introduction.html
ABAddressBook类允许您访问通讯录数据。您可以创建自己的自定义对象来处理这些数据。
kABPersonEmailProperty属性允许您获取ABPerson的电子邮件属性。