我正在实现一个应用程序,用户应该能够从地址簿导入联系人或自己提供联系人。 我使用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/