Почему я не могу получить группы из контейнера по умолчанию 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.
Есть ли код, который я могу написать, чтобы предотвратить проблему или исправить ее, как только она возникнет?