2017-01-30 10 views
0

Я ищу способ получить список групп (CNGroup), которые относятся к контактному контейнеру (CNContainer). Когда я использую predicate, он терпит неудачу.Как получить массив CNGroup из CNContainer с помощью CNContactStore?

код я использую

func populateGroups(tableView:NSTableView,container:CNContainer){ 

    print("populateGroups.start") 

    print(container.name) 
    print(container.identifier) 

    let contactStore = CNContactStore() 

    do { 
     let groupsPredicate = CNGroup.predicateForGroups(withIdentifiers: [container.identifier]) 
     groups = try contactStore.groups(matching: groupsPredicate) 
     groupNames.removeAll(); 
     for group:CNGroup in groups { 
      self.groupNames.append(group.name) 
     } 
     tableView.reloadData() 
    } catch { 
     print("Unexpected error fetching groups") 
    } 

    print("populateGroups.finish") 

} 

Я получаю сообщение об ошибке от не имеет смысла для меня.

Группы строк = попробуйте contactStore.groups (соответствие: groupsPredicate) вызывает ошибку.

[Accounts] Не удалось обновить учетную запись с идентификатором 47008233-A663-4A52-8487-9D7505847E29, ошибка: Ошибка домена = ABAddressBookErrorDomain Code = 1002 "(нуль)"

Что сбивает с толку, поскольку я не обновляя любой учетной записи.

Если я изменю эту строку кода на группы = попробуйте contactStore.groups (соответствует: nil) Я получаю все группы для всех контейнеров.

Как создать предикат, который вернет все CNG-группы, принадлежащие CNContactContainer?

ответ

0

Я работал вокруг этого, проверяя, что каждая группа из всех групп принадлежали к контейнеру в вопросе использования CNContainer.predicateForContainerOfGroup

func populateGroups(tableView:NSTableView,container:CNContainer){ 

    let contactStore = CNContactStore() 

    do { 
     let groups:[CNGroup] = try contactStore.groups(matching: nil) 
     self.groups.removeAll(); 
     groupNames.removeAll(); 
     for group:CNGroup in groups { 
      let groupContainerPredicate:NSPredicate = CNContainer.predicateForContainerOfGroup(withIdentifier: group.identifier) 
      let groupContainer:[CNContainer] = try contactStore.containers(matching: groupContainerPredicate) 
      if(groupContainer[0].identifier == container.identifier) { 
       self.groupNames.append(group.name) 
       self.groups.append(group) 
      } 
     } 
     tableView.reloadData() 

    } catch { 
     print("Unexpected error fetching groups") 
    } 

}