Почему я не могу получить группы из контейнера по умолчанию Apple iOS Contacts Framework?

У меня есть приложение для iOS, которое обращается к контейнеру по умолчанию в хранилище контактов и получает группы в этом контейнере. После того, как я вышел из устройства iPhone 8, на котором установлено приложение, а затем вошел в систему с другой учетной записью. Затем вышли из системы и вошли в мою первоначальную учетную запись, приложение больше не могло получать группы из контейнера по умолчанию.

Почему он это делает и как мне это исправить?

Вот соответствующий код:

cnGroups = try contactStore.groups(matching: CNGroup.predicateForGroupsInContainer(withIdentifier: contactStore.defaultContainerIdentifier()))

print("cnGroups...")
print(cnGroups)

Вот вывод окна отладки:

cnGroups...
[]

Я инициализировал хранилище контактов глобально в быстром файле за пределами любого класса:

internal var contactStore = CNContactStore()

Этот код для запроса доступа к контактам от пользователя находится в методе обратного вызова viewDidLoad(). В методе initUTIGroups() я пытаюсь извлечь группы из контейнера по умолчанию.

contactStore.requestAccess(for: .contacts) {

    permissionGranted, error in

    if error != nil {

        print(error?.localizedDescription as Any)

    }

    if permissionGranted {

        self.initUTIGroups()

    } else {

        let alertMessage = "\(displayName) will not work unless you allow access to Contacts. Please go to Settings and allow access to Contacts then restart \(displayName)"

        let alert = UIAlertController(title: nil, message: alertMessage, preferredStyle: .alert)

        let actionOK = UIAlertAction(title: "OK", style: .cancel, handler: nil)

        alert.addAction(actionOK)

        self.present(alert, animated: true, completion: nil)

    }

}

Я получил все контейнеры в хранилище контактов и сравнил их с контейнером по умолчанию. Похоже, что текущий контейнер по умолчанию не совпадает с контейнером по умолчанию до того, как я вышел из iCloud в первый раз. Я обнаружил контейнер, содержащий группы, которые представляют собой те же группы, которые я получил из контейнера по умолчанию перед первым выходом из iCloud.

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

0 ответов

Другие вопросы по тегам