使用ABAddressBook,当我希望用户能够为他们以前从未见过的联系人选择“创建新联系人”和“添加到现有联系人”时,我将创建并呈现一个ABUnkNownPersonViewController.
我无法在CNContacts框架中找到复制此功能的方法.在我看来,CNContactViewController(forUnkNownContact:contact)可以工作,但不幸的是,这只允许用户“发送消息”或“共享联系人”.
如何允许用户将联系人保存到CNContacts中作为新联系人或作为现有联系人的一部分的地址簿?
func presentContact() {
let status = CNContactStore.authorizationStatusForEntityType(.Contacts)
switch status {
case .Authorized: ()
case .NotDetermined: requestAccess()
case .Denied,.Restricted: accessDenied()
}
print("authorized? \(status == .Authorized)") //prints "authorized? true"
let unkNown = CNContactViewController(forUnkNownContact: contact!)
unkNown.delegate = self
self.navigationController?.pushViewController(unkNown,animated: false)
}
即使我尝试请求访问,用户仍然无法保存联系人.
解决方法
你一直没有显示真实的代码,所以无法帮助你.所以我失去了兴趣.我只会告诉你我的真实代码然后让你去研究它并思考我正在做什么和你在做什么之间的区别.这是实际的工作代码;你们去做同样的事:
let con = CNMutableContact()
con.givenname = "Johnny"
con.familyName = "Appleseed"
con.phoneNumbers.append(CNLabeledValue(
label: "woods",value: CNPhoneNumber(stringValue: "555-123-4567")))
let unkvc = CNContactViewController(forUnkNownContact: con)
unkvc.message = "He kNows his trees"
unkvc.contactStore = CNContactStore()
unkvc.delegate = self
unkvc.allowsActions = false
self.navigationController?.pushViewController(unkvc,animated: true)