无法从contactProperty

时间:2019-12-06 12:55:56

标签: swift cncontact cncontactpicker

花费大量时间进行故障排除之后,在StackOverFlow上搜索并尝试一些答案。我无法使其正常工作,我需要能够选择联系人拥有的任何电话号码,但是即使选择住家/办公电话号码,我也总是会收到CNLabelPhoneNumberMain或在某些情况下会收到CNLabelPhoneNumberMobile

很长一段时间以来,我一直在遇到这种麻烦,如果有人能指出我的错误,我将不胜感激:

这是我的代码:

@IBAction func addSupporterContactTapped(_ sender: UIButton) {

     let contactPicker = CNContactPickerViewController()
     contactPicker.displayedPropertyKeys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]
     contactPicker.delegate = self
     self.present(contactPicker, animated: true, completion: nil)
}

这就是选择的方式:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {

    let numbers = contactProperty.contact.phoneNumbers
    var phoneNumber: String?

            for contact in numbers {
        switch contact.label {
        case CNLabelHome:
            print("contact.label = \(contact.label ?? "")")
            phoneNumber = (contact.value ).stringValue
        case CNLabelWork:
            print("contact.label = \(contact.label ?? "")")
            phoneNumber = (contact.value ).stringValue
        case CNLabelOther:
            print("contact.label = \(contact.label ?? "")")
            phoneNumber = (contact.value ).stringValue
        case CNLabelPhoneNumberMain:
            print("contact.label = \(contact.label ?? "")")
            phoneNumber = (contact.value ).stringValue
        case CNLabelPhoneNumberiPhone:
            print("contact.label = \(contact.label ?? "")")
            phoneNumber = (contact.value ).stringValue
        case CNLabelPhoneNumberMobile:
            print("contact.label = \(contact.label ?? "")")
            phoneNumber = (contact.value ).stringValue
        case CNLabelPhoneNumberPager:
            print("contact.label = \(contact.label ?? "")")
            phoneNumber = (contact.value ).stringValue
        case CNLabelPhoneNumberHomeFax:
            print("contact.label = \(contact.label ?? "")")
            phoneNumber = (contact.value ).stringValue
        case CNLabelPhoneNumberWorkFax:
            print("contact.label = \(contact.label ?? "")")
            phoneNumber = (contact.value ).stringValue
        case CNLabelPhoneNumberOtherFax:
            print("contact.label = \(contact.label ?? "")")
            phoneNumber = (contact.value ).stringValue
        default:
            break
        }
    }

但是无论如何,如上所述,我从来没有得到正确选择的号码。

如果有帮助,选择任何数字后,我会在控制台上打印该信息:

contact.label = _$!<Home>!$_
contact.label = _$!<Mobile>!$_
contact.label = _$!<HomeFAX>!$_

请问有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

picker: didSelect contactProperty:中选择一个电话号码后,您会在CNPhoneNumber的{​​{1}}中得到一个value

contactProperty