ios - 无法访问地址簿的 Person ViewController

标签 ios cocoa-touch addressbook abpersonviewcontroller addressbookui

我正在实现一个应用程序,用户应该能够从地址簿导入联系人或自己提供联系人。 我使用https://github.com/soffes/sspersonviewcontroller实现了一切。 新联系人已添加到地址簿中,一切都运行良好。 我通过使用 ABPersonViewController 等拥有所有字段和编辑功能...

但现在,客户坚持认为联系人不应存储在地址簿中,而应存储在应用程序中,并且永远不应要求用户授予对地址簿的访问权限(导入除外)。

我通过使用 ABRecordRef 的序列化器(来自 https://github.com/nvrooij/Let-s-Share/blob/master/Classes/ABRecordSerializer.h )实现了“将联系人导入应用程序”的工作

但我最大的问题是,ABNewPersonViewController 和 ABPersonViewController 坚持要求用户访问地址簿。

我需要什么:

  • 无需访问地址簿即可创建联系人的 View 。它应该返回一个 ABRecordRef 给一个人,这样我就可以在某个地方序列化它(atm,我将它存储到 NSUserDefaults)

  • 无需访问地址簿即可编辑联系人的 View 。

我已经尝试过的: 正在关注How to Use a ABPersonViewController without connecting to AddressBook我设置了 displayedPerson - 但“授予访问权限弹出窗口”仍然显示。

从 ABNewPersonViewController 和 ABPersonViewController 的文档中,我得到的印象是,子类化和重写地址簿的 getter 在所有情况下都返回 nil 是可行的,并且我最终会得到没有地址簿的 View 。 但在那里的某个地方(我假设 View 本身)再次创建了地址簿,我无法摆脱这个调用。

您可以如何提供帮助_

非常欢迎任何重新实现 ABPersonViewController (包括编辑功能)的指针或任何其他提示。

任何有关如何创建具有所有美好事物(国家/地区选择、字段添加等)的用户 View Controller 的想法也非常受欢迎。

如果您认为我的方法完全不对劲,也请发表评论。我总是在寻找不同的角度,并且可能对整个地址簿灾难挖掘得太深了。

我希望用于创建和编辑联系人的 Controller 能够与地址簿完全解耦,并返回 ABRecordRef 而不是访问地址簿。就我而言,这将大大简化我的任务(人可以梦想)。

祝一切顺利, iosGoblin

最佳答案

我解决/规避了该问题,如下所示: 我放弃了编辑功能,并创建了一个类似于 ABNewPersonViewController 的 View Controller (只有一些特定字段,如姓名、姓氏、电话号码、地址)。 根据输入,我创建了一个 ABRecordRef (有用的代码位于 http://www.modelmetrics.com/tomgersic/iphone-programming-adding-a-contact-to-the-iphone-address-book/ )。 我使用 ABRecordSerializer(我的问题中的链接)将此联系人序列化为 NSUserDefaults

如果用户导入联系人,我只需将从 ABPeoplePickerNavigationController 返回的联系人序列化到 NSUserDefaults 中。

如果联系人存储在 NSUserDefaults 中,我会反序列化并显示它。

回顾:

  • 我重新实现了 ABNewPersonViewController 的简化版本
  • 我使用序列化程序(上面的链接)将联系人存储在 NSUserDefaults 中(无论是从我的 View Controller 还是从导入的 View Controller ,一旦序列化我就不再关心)
  • 我反序列化联系人并显示它

祝一切顺利, iosGoblin

关于ios - 无法访问地址簿的 Person ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15297575/

相关文章:

javascript - swift/WebKit : Updating HTML in WKWebView with Javascript

ios - 错误 "Use of unresolved identifier ' EKEntityTypeEvent'“尝试访问日历

iphone - 为什么在访问对象属性时应该使用 KVC 而不是简单的点语法?

iphone - UITableViewCell,删除按钮框架?

iphone - iPhone 地址簿中自定义标签的最大数量?

iOS 8 添加联系人到地址簿

ios - iOS 中的反编译可能性以及如何防止它们

ios - 链接不同类型的 RxSwift observable

objective-c - 像这样的 UITabBar

iphone - 检索按修改日期 iOS 排序的联系人