无法从 contactProperty 获取选定的号码
Can't get the selected number from contactProperty
在花了很多时间进行故障排除、搜索并在 Whosebug 上尝试了一些答案之后。我无法让它正常工作,我需要能够 select 联系人拥有的任何号码,但我总是得到 CNLabelPhoneNumberMain
或者在某些情况下 CNLabelPhoneNumberMobile
即使 selecting home/work 个数。
我长期以来一直面临这个问题,如果有人能指出我的错误,我将不胜感激:
这是我的代码:
@IBAction func addSupporterContactTapped(_ sender: UIButton) {
let contactPicker = CNContactPickerViewController()
contactPicker.displayedPropertyKeys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]
contactPicker.delegate = self
self.present(contactPicker, animated: true, completion: nil)
}
这就是 select离子的制造方法:
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
}
}
但无论如何,正如我上面提到的,我从来没有得到正确的 selected 号码。
如果有帮助,当任何数字被 selected 时,我会在控制台中打印:
contact.label = _$!<Home>!$_
contact.label = _$!<Mobile>!$_
contact.label = _$!<HomeFAX>!$_
请问有人可以帮忙吗?
当您 select 在 picker: didSelect contactProperty:
中输入 phone 时,您会在 contactProperty
[=15] 的 value
中得到 CNPhoneNumber
=]
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
if let phoneNumberObject = contactProperty.value as? CNPhoneNumber {
let phoneNumber = phoneNumberObject.stringValue
print(contactProperty.label!, phoneNumber)
}
}
在花了很多时间进行故障排除、搜索并在 Whosebug 上尝试了一些答案之后。我无法让它正常工作,我需要能够 select 联系人拥有的任何号码,但我总是得到 CNLabelPhoneNumberMain
或者在某些情况下 CNLabelPhoneNumberMobile
即使 selecting home/work 个数。
我长期以来一直面临这个问题,如果有人能指出我的错误,我将不胜感激:
这是我的代码:
@IBAction func addSupporterContactTapped(_ sender: UIButton) {
let contactPicker = CNContactPickerViewController()
contactPicker.displayedPropertyKeys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]
contactPicker.delegate = self
self.present(contactPicker, animated: true, completion: nil)
}
这就是 select离子的制造方法:
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
}
}
但无论如何,正如我上面提到的,我从来没有得到正确的 selected 号码。
如果有帮助,当任何数字被 selected 时,我会在控制台中打印:
contact.label = _$!<Home>!$_
contact.label = _$!<Mobile>!$_
contact.label = _$!<HomeFAX>!$_
请问有人可以帮忙吗?
当您 select 在 picker: didSelect contactProperty:
中输入 phone 时,您会在 contactProperty
[=15] 的 value
中得到 CNPhoneNumber
=]
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
if let phoneNumberObject = contactProperty.value as? CNPhoneNumber {
let phoneNumber = phoneNumberObject.stringValue
print(contactProperty.label!, phoneNumber)
}
}