如何在核心数据堆栈中的客户端上使用ABPeoplePickerNavigationController

时间:2012-02-21 10:35:45

标签: iphone objective-c ios core-data abaddressbook

我有一个核心数据堆栈,其中包含一个名为“Client”的实体。每个客户端都有一个'addressBookID'属性,该属性引用AddressBook中人员记录的uniqueID。我目前正在使用fetchedResultsController来填充tableViewController以显示这些客户端。但是,viewController非常基本。

理想情况下,我想使用ABPeoplePickerNavigationController UI,以便我的客户端被Last Initial的部分分开,并且右侧的拖动条可以快速滑动到字母表中的所需点。添加的搜索功能也很有用。

是否可以使用ABPeoplePickerNavigationController但用自己的数据填充(例如使用委托)?

Alernatively,这些功能是否可以轻松添加到fetchedResultsController样式表中?我唯一的另一个问题是能够从Core Data堆栈中获取结果,但是按照存储在ABAddressBook中的名称对它们进行排序。我不确定sortDescriptor可以通过引用存储在堆栈外部的字段进行排序。

欣赏任何建议/意见?

1 个答案:

答案 0 :(得分:1)

您需要创建一个ABAddressBookRef并使用要在导航控制器中显示的联系人填充它。然后创建ABPeoplePickerNavigationController并将您的ABAddressBookRef分配给addressBook属性。

ABPeoplePickerNavigationController documentation

Optional. The address book from which to obtain the list of contacts.

@property(nonatomic, readwrite) ABAddressBookRef addressBook

要创建ABAddressBookRef,请从ABAddressBookCreate()和ABAddressBookAddRecord()开始。这些功能记录在Apple's ABAddressBook Reference for iOS

如果您希望不保存对ABAddressBookRef的更改(换句话说,您希望使用临时联系人进行设置),则只需不要调用ABAddressBookSave()。文档说明

  

只有在使用ABAddressBookSave保存地址簿后,对返回的地址簿所做的更改才会反映在地址簿数据库中。