Как я могу получить все контакты из определенной группы в адресной книге?
Привет у меня есть несколько групп в моей адресной книге iPhone, которая содержит несколько контактов. Например:
адресная книга iPhone, Group1, Group2 и т. д.
каждая группа содержит контактную информацию, как имя,фамилия,адрес электронной почты ,номер телефона. Теперь, выбрав любую группу, я должен получить все сведения о добавленных контактах в ней. Может кто-нибудь, пожалуйста, направьте меня, как я могу получить все контактные данные из конкретной группы?
пожалуйста, нужны некоторые руководящие принципы.
2 ответов
CFErrorRef error = NULL;
ABAddressBookRef addrBook = ABAddressBookCreate();
CFArrayRef groups = ABAddressBookCopyArrayOfAllGroups(addrBook);
CFIndex numGroups = CFArrayGetCount(groups);
for(CFIndex idx=0; idx<numGroups; ++idx) {
ABRecordRef groupItem = CFArrayGetValueAtIndex(groups, idx);
CFArrayRef members = ABGroupCopyArrayOfAllMembers(groupRef);
if(members) {
NSUInteger count = CFArrayGetCount(members);
for(NSUInteger idx=0; idx<count; ++idx) {
ABRecordRef person = CFArrayGetValueAtIndex(members, idx);
// your code
}
CFRelease(members);
}
}
CFRelease(groups);
CFRelease(addrBook);
этот код не гарантируется герметичность, поэтому дважды проверьте его. Это более или менее правильно.
все это описано в документации, поэтому, пожалуйста, используйте то, что вы не понимаете в этом. Что ты пытался сделать? Что вы получили, какие ошибки у вас были?
Если вы хотите работать с контактами, в дополнение к очень полная Руководство По Программированию Адресной Книги, у вас конечно Справочник по структуре адресной книги и особенно справочная документация ABGroup для работы с группами. И последнее содержит явно метод, чтобы получить всех членов группы. Так что здесь у тебя должно быть все, что нужно.
CFArrayRef cfmembers = ABGroupCopyArrayOfAllMembers(group);
NSArray* members = (NSArray*)cfmembers; // working with NSArray is usually easier that CFArrays so I like using toll-free bridging
for(ABRecordRef person in members)
{
// ... your code ...
}
CFBridgingRelease(cfmembers); // release memory when done, following the usual memory mgmt rules