【发布时间】:2016-08-28 14:16:22
【问题描述】:
使用 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)
}
即使我尝试请求访问权限,用户仍然无法保存联系人。
【问题讨论】:
-
因为你没有显示真实的代码。显示您的代码!您仍然遗漏了各种重要的部分,我不知道这是因为您不知道应该执行它们还是因为您只是懒惰地将代码粘贴到 Stack Overflow。
contact是什么?显示您设置unknown的contactStore的行。这些东西都很重要。 显示。您的。真实的。代码。 -
我还遗漏了哪些重要的部分?
contact是任意的CNContact,具有任意数量的属性集。我不确定这会对未显示的操作按钮产生什么影响。除了unknown的contactStore属性被设置,一切都在这里,这被证明是问题所在。谢谢你的帮助。如果我在制作一个最小的可重现示例时偷工减料,我很抱歉;我试图让它尽可能简单易懂。 -
我会接受这个答案——或者你发布的答案,如果它仍然存在的话——因为正确设置
contactStore确实解决了这个问题。
标签: ios swift contacts cncontact