【问题标题】:Swift 2.0 ContactsUI FrameworkSwift 2.0 ContactsUI 框架
【发布时间】:2015-11-09 04:16:15
【问题描述】:

我正在使用 Swift 2.0 开发一个项目,该项目需要我使用 IOS 9s ContactUI 框架。我遇到的问题是从联系人列表中正确选择电话号码。当我从联系人中选择电话号码时,应用程序崩溃。

这是我用来执行此任务的代码。

var delegate: NewLocationViewControllerDelegate!
var contacts = [CNContact]()

override func viewDidLoad() {
    super.viewDidLoad()
    UIApplication.sharedApplication().delegate as! AppDelegate
    // Do any additional setup after loading the view.
}//end

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func openContacts(sender: UIButton) {
    let contactPicker = CNContactPickerViewController()
    contactPicker.delegate = self;
    contactPicker.displayedPropertyKeys = [CNContactPhoneNumbersKey]

    self.presentViewController(contactPicker, animated: true, completion: nil)
}//end

func contactPicker(picker: CNContactPickerViewController, didSelectContactProperty contactProperty: CNContactProperty) {
    let contact = contactProperty.contact
    let phoneNumber = contactProperty.value as! CNPhoneNumber
    print(contact.givenName)
    print(phoneNumber.stringValue)
}//end

【问题讨论】:

  • 崩溃怎么办?在哪条线上,用什么信息?
  • 这是我从控制台得到的错误 Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted}
  • 这是在模拟器里吗?
  • @matt 是的,它在模拟器中,当您单击电话号码时屏幕变黑并且应用程序崩溃。

标签: ios swift swift2 ios9 contactsui


【解决方案1】:

问题是电话号码上的水龙头试图拨打电话 - 而在模拟器上,没有电话。

永远不会呼叫您的contactPicker:didSelectContactProperty:,因为永远不会选择电话号码。相反,点击电话号码将尝试拨打该号码。这是因为您没有提供predicateForSelectionOfProperty。当key 是电话号码时,您需要将predicateForSelectionOfProperty 设置为计算结果为true 的NSPredicate。

【讨论】:

  • 想想我在告诉你什么。如果键是电话号码时没有返回 true 的 NSPredicate,您将无法选择电话号码。现在去写那个谓词并将predicateForSelectionOfProperty设置为它。
猜你喜欢
  • 2012-03-31
  • 1970-01-01
  • 2012-12-17
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-30
  • 2012-06-16
相关资源
最近更新 更多