CNContactBirthdayKey игнорируется в ContactsUI ViewControllers - PullRequest
0 голосов
/ 14 декабря 2018

Когда я пытаюсь отфильтровать свойства Contacts с помощью displayPropertyKeys, что-то не так с ключом CNContactBirthdayKey.Несмотря на то, что у моего контакта есть день рождения, я не вижу его ни в каком ViewController для ContactsUI.Протестировано на ios 12.1, IOS 11.0 и 10.3.3.

С не установленными отображаемыми ключами свойства:

enter image description here

С отображаемыми ключами свойства = [CNContactBirthdayKey]:

enter image description here

Вы можете мне помочь?

Вот код в 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
    }
...