Как я могу получить все контакты из определенной группы в адресной книге?

Привет у меня есть несколько групп в моей адресной книге 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