समस्या निवारण में कई घंटे बिताने के बाद, 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>!$_

क्या कोई कृपया मदद कर सकता है?

2
Jessica Kimble 6 पद 2019, 15:55

1 उत्तर

सबसे बढ़िया उत्तर

जब आप picker: didSelect contactProperty: में कोई फ़ोन नंबर चुनते हैं, तो आपको contactProperty के value में एक CNPhoneNumber वापस मिलता है

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
    if let phoneNumberObject = contactProperty.value as? CNPhoneNumber {
        let phoneNumber = phoneNumberObject.stringValue
        print(contactProperty.label!, phoneNumber)
    }
}
2
vadian 9 पद 2019, 13:11