Как я могу получить имя контейнера с помощью Contacts Framework (iOS9)

Я использую структуру контактов в приложении. то, что я пытаюсь сделать, это классифицировать все контакты по их контейнерам. например контакты facebook будут под заголовком «Facebook», контакты google под «Google». Но когда я печатаю имена контейнеров, иногда они бывают пустыми, нулевыми или чем-то расплывчатым, например «Адресная книга». Есть ли способ узнать, какой контейнер принадлежит какой учетной записи (локальной, facebook, google и т. д.). Заранее спасибо.

    CNContactStore *contactStore = [[CNContactStore alloc]init];
    NSArray *keysToFetch = @[CNContactGivenNameKey,CNContactFamilyNameKey,CNContactIdentifierKey,CNContactMiddleNameKey,CNContactPhoneNumbersKey];
    NSError *error;
    NSArray *containers = [contactStore containersMatchingPredicate:nil error:&error];
    for (CNContainer *container in containers) {
        NSLog(@"Container: %@",container.name);
    }

person Rezwan    schedule 10.02.2016    source источник
comment
Интересно, есть ли у вас прогресс в этом?   -  person simonthumper    schedule 16.06.2016
comment
нет пока нет.   -  person Rezwan    schedule 29.06.2016


Ответы (3)


Я потратил 2 дня на эту проблему, но не получил никакого решения.

Затем сделайте это с одним патчем. Это сработало для меня.

Цель C

if ([container.name isEqualToString:@"Card"]) {
    NSLog(@"iCloud");
} else if ([container.name isEqualToString:@"Address Book"]) {
    NSLog(@"google");
} else if ([container.name isEqualToString:@"Contacts"]) {
    NSLog(@"Yahoo");
} else {
    NSLog(@"Other");
}

Свифт 5.3

if container.name == "Card" {
    print("iCloud")
} else if container.name == "Address Book" {
    print("google")
} else if container.name == "Contacts" {
    print("Yahoo")
} else {
    print("Other")
}
person Ronak Kalavadia    schedule 13.07.2017

Отладчик показывает, что в CNContainer есть член с именем accountIdentifier, но он всегда кажется нулевым. Мне интересно, связано ли это с каким-то частным API Apple, который Contacts.app использует для получения имен учетных записей для использования в качестве меток контейнеров. То есть по какой-то причине Apple не хочет, чтобы у нас была эта информация. Возможно, это более полезно для контейнеров Exchange, где имя контейнера функционирует как имя группы.

person JLundell    schedule 04.02.2018

У меня сработала инициализация массива:

NSArray *containers = [[NSArray alloc] init];

person Kevin    schedule 28.03.2017