Когда я пытаюсь отфильтровать свойства Contacts с помощью displayPropertyKeys, что-то не так с ключом CNContactBirthdayKey.Несмотря на то, что у моего контакта есть день рождения, я не вижу его ни в каком ViewController для ContactsUI.Протестировано на ios 12.1, IOS 11.0 и 10.3.3.
С не установленными отображаемыми ключами свойства:
С отображаемыми ключами свойства = [CNContactBirthdayKey]:
Вы можете мне помочь?
Вот код в Swift 4:
Пример с CNContactPickerViewController():
import UIKit
import ContactsUI
class MyViewController: UIViewController, CNContactPickerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let vc = CNContactPickerViewController()
vc.delegate = self
vc.displayedPropertyKeys = [CNContactBirthdayKey]
self.present(vc, animated: true, completion: nil)
}
}
AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
let vc = MyViewController()
window?.rootViewController = UINavigationController(rootViewController: vc)
return true
}
Пример с CNContactViewController ():
import UIKit
import ContactsUI
class MyViewController: UIViewController, CNContactPickerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let contacts = fetchContactsWithBirthday()
let vc2 = CNContactViewController(for: contacts.first!)
vc2.displayedPropertyKeys = [CNContactBirthdayKey]
self.navigationController?.pushViewController(vc2, animated: true)
}
func fetchContactsWithBirthday() -> [CNContact] {
var contacts: [CNContact] = []
let contactStore = CNContactStore()
let keys = CNContactViewController.descriptorForRequiredKeys()
let fetchReq = CNContactFetchRequest.init(keysToFetch: [CNContactGivenNameKey,CNContactFamilyNameKey, CNContactBirthdayKey, CNContactNicknameKey, CNContactImageDataAvailableKey, CNContactImageDataKey, CNContactThumbnailImageDataKey] as [CNKeyDescriptor])
fetchReq.keysToFetch.append(keys)
do {
try contactStore.enumerateContacts(with: fetchReq) {
(contact, end) in
if contact.birthday != nil {
contacts.append(contact)
}
}
}
catch {
print(error)
}
return contacts
}