swift - 无法从 contactProperty 获取所选号码
问题描述
在花了很多时间进行故障排除、搜索并尝试了 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
}
}
但无论如何,正如我上面提到的,我从来没有得到正确选择的数字。
If it can help, When any number is selected, I get this printed in the console:
contact.label = _$!<Home>!$_
contact.label = _$!<Mobile>!$_
contact.label = _$!<HomeFAX>!$_
请问有人可以帮忙吗?
解决方案
当您在中选择一个电话号码时,您picker: didSelect contactProperty:
会CNPhoneNumber
在value
contactProperty
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
if let phoneNumberObject = contactProperty.value as? CNPhoneNumber {
let phoneNumber = phoneNumberObject.stringValue
print(contactProperty.label!, phoneNumber)
}
}
推荐阅读
- android - UnsatisfiedLinkError: No implementation found for byte[] dji.midware.natives.SDKRelativeJNI.native_getXXX (...)
- c# - 在 C# 中,请求语音识别 Xamarin Android 的权限时出现错误
- c# - 从本机 C++ 应用程序调用 WPF 会导致异步调用失去上下文
- ember.js - EmberJS hasMany 不获取关系
- angular - 如何为主题可观察方法编写 Jasmine 测试?
- node.js - Nodejs和swagger文件上传:TypeError:无法获取
- javascript - Ionic 3 在构建时更改变量/主题
- apache-kafka - 通过在 Kafka Spout 中使用新的 Kafka 版本 2.1.0 和 Apache Storm 1.2.2 来获取 ClassNotFoundException
- tensorflow - 无法连接到 X 服务器 GOOGLE COLAB
- ios - Gmail 有没有办法从 UIapplication.shared.open url 的文本中识别换行符