【问题标题】:Can't get the selected number from contactProperty无法从 contactProperty 获取所选号码
【发布时间】:2019-12-06 12:55:56
【问题描述】:

在花费大量时间进行故障排除、搜索和尝试 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>!$_

有人可以帮忙吗?

【问题讨论】:

  • 你检查numbers是否包含正确的信息?
  • 你的didSelect函数中有索引吗?
  • @Koen 是的,我认为数字包含正确的信息,在选择时我得到了错误的数字,如上所述。
  • @Andres 我的 didSelect 函数贴在上面。
  • 你的代码没有意义。查看let numbers = contactProperty.contact.phoneNumbers 并不能告诉您用户选择的数字。您的任何代码都不会查看用户选择的内容。

标签: swift cncontact cncontactpicker


【解决方案1】:

当您在picker: didSelect contactProperty: 中选择电话号码时,您会在value 的contactProperty 中返回CNPhoneNumber

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
    if let phoneNumberObject = contactProperty.value as? CNPhoneNumber {
        let phoneNumber = phoneNumberObject.stringValue
        print(contactProperty.label!, phoneNumber)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    相关资源
    最近更新 更多