2013-08-11 2 views
1

Как получить все имена групп, сохраненные внутри контактов? Ниже приведен мой код для справки:Получение всех имен групп в Контакты

NSMutableArray *list = [NSMutableArray array]; 
ABAddressBookRef myAddressBook = ABAddressBookCreate(); 
CFArrayRef allSources = ABAddressBookCopyArrayOfAllGroups(myAddressBook); 

list = [NSMutableArray arrayWithArray: (__bridge NSArray*) allSources]; 

NSLog(@"GROUPS %@",[list objectAtIndex:0]); 

NSLog возвращает a, но мне нужно получить имя группы.

Спасибо.

ответ

2

Используйте функцию ABRecordCopyCompositeName().

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 
if (addressBook != NULL) { 
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { 
     if (granted) { 
      CFArrayRef allGroups = ABAddressBookCopyArrayOfAllGroups(addressBook); 
      if (allGroups != NULL) { 
       NSMutableArray *names = [NSMutableArray array]; 
       for (int i = 0; i < CFArrayGetCount(allGroups); i++) { 
        ABRecordRef group = CFArrayGetValueAtIndex(allGroups, i); 
        CFStringRef name = ABRecordCopyCompositeName(group); 
        [names addObject:(__bridge NSString *)name]; 
        CFRelease(name); 
       } 
       NSLog(@"names = %@", names); 
       CFRelease(allGroups); 
      } 
     } 
     CFRelease(addressBook); 
    }); 
} 
+0

Ваш код не работает из коробки, но после небольшого редактирования он сделал трюк. Спасибо Карлу! – jettplaine

+0

Добро пожаловать, извините, что это не сработало сразу для вас. Уверяю вас, я протестировал его на iPhone 5 под управлением iOS 6.1 и заметил, что он зарегистрировал правильный вывод. Рад, что вы смогли поместить его в свои цели! –

+0

Здравствуйте, я пробовал этот код, и метод ABAddressBookCopyArrayOfAllGroups возвращает 0 объектов, несмотря на то, что у меня есть две группы в моем iPhone «Gmail» и «На моем iPhone». – Vervatovskis

0

Это работает для меня:

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, nil); 

NSArray *allGroups = CFBridgingRelease(ABAddressBookCopyArrayOfAllGroups(addressBook)); 
NSInteger numberOfGroups = [allGroups count]; 

for (NSInteger i = 0; i < numberOfGroups; i++) { 
    ABRecordRef group = (__bridge ABRecordRef)allGroups[i]; 

    NSString *groupName = CFBridgingRelease(ABRecordCopyCompositeName(group)); 
    NSLog(@"group = %@",groupName); 

    NSLog(@"============================================="); 
} 
Смежные вопросы