CNContact Frame работает, не извлекая все контакты (iCloud, Gmail)


Настройки > Контакты>Учетная запись по умолчанию, выбранная как iCloud и сохраненная как новый контакт.Затем сменил учетную запись по умолчанию на gmail. CNContactStore не получает новый сохраненный контакт.

 CNContactStore *store = [[CNContactStore alloc] init];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
    if (granted == YES)
    {
        NSArray *keys = @[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey,CNContactEmailAddressesKey];
        NSArray * contactContainerArray =  [store containersMatchingPredicate:nil error:nil];
        for(CNContainer * container in contactContainerArray) {
            NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:container.identifier];
            NSError *error;
            NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&error];
}
1   5   2017-05-25 09:29:24

1 ответ:

Если вы просто хотите получить все унифицированные Контакты (Контакты в разных учетных записях, которые представляют одного и того же человека, могут быть автоматически связаны вместе. Связанные контакты отображаются в приложениях macOS и iOS как унифицированные контакты) лучшее решение будет ниже единицы

 -(void)fetchContacts
  {
      CNContactStore *store = [[CNContactStore alloc] init];    
      [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
      if (granted == YES)
      {
        //keys with fetching properties
        NSArray *keys = @[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey,CNContactEmailAddressesKey];
        NSString *containerId = store.defaultContainerIdentifier;
        NSArray * contactContainerArray =  [store containersMatchingPredicate:nil error:nil];
        CNContactFetchRequest * fetchRequest = [[CNContactFetchRequest alloc]initWithKeysToFetch:keys];
        [store enumerateContactsWithFetchRequest:fetchRequest error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {

        }];
      }
  }