0

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

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

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

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

所以我需要:

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

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

我已经尝试过: 按照如何在不连接到地址簿的情况下使用 ABPersonViewController我设置了 displayPerson - 但“授权访问弹出窗口”仍然出现。

从 ABNewPersonViewController 和 ABPersonViewController 的文档中,我得到的印象是,在所有情况下,子类化和覆盖地址簿的 getter 以返回 nil 都可以,我最终会看到没有地址簿的视图。但是在那里的某个地方(我假设视图本身)再次创建了地址簿,我无法摆脱这个电话。

你可以如何提供帮助_

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

任何关于如何创建具有所有好东西(国家选择、字段添加等)的创建用户视图控制器的想法也非常受欢迎。

如果您认为我的方法完全不正确,请也发表评论。我一直在寻找不同的角度,可能对整个通讯簿灾难挖得太深了。

我希望用于创建和编辑联系人的控制器与地址簿完全分离,并返回 ABRecordRef 而不是访问地址簿。就我而言,这将大大简化我的任务(一个人可以梦想)。

一切顺利,iosGoblin

4

1 回答 1

1

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

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

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

回顾:

  • 我重新实现了 ABNewPersonViewController 的简化版本
  • 我使用序列化程序(上面的链接)将联系人存储在 NSUserDefaults 中(来自我的视图控制器或从导入的视图控制器,一旦它被序列化,我就不再关心了)
  • 我将联系人反序列化并显示

一切顺利,iosGoblin

于 2013-03-10T15:30:48.157 回答