我的目标是允许用户使用标准UI(ABPersonViewController)创建联系人,但允许他们选择将其添加到地址簿或将其存储在本地(在我的CoreData数据库中) 。因此,我需要执行以下操作之一:
我的问题是我无法想出一种创建记录的方法,而无需将其添加到用户的地址簿中。
一些背景
在 iOS地址簿编程指南 (link here)中,Apple的文档说明:
即使记录通常是地址簿数据库的一部分, 它们也可以存在于它之外。这使它们成为一种有用的方法 存储您的应用程序正在使用的联系信息。
当然,这听起来非常适合我需要做的事情。但它没有提供有关在地址簿之外创建ABRecords的方法的任何说明。
API似乎只提供了在指定源(ABPersonCreateInSource)或默认源(ABPersonCreate)中创建的方法。最重要的是,虽然the documentation说要调用ABAddressBookAddRecord将创建的记录添加到地址簿,但我的测试显示该记录仍然被添加! (也许它是由ABPersonViewController添加的,我还没有检查过。)
我在互联网上搜索了很多,虽然有些人提出了类似的问题,但似乎没有人以实际工作的方式回答;-)
但是我已经看过几个应用程序这样做,所以我确信这是可能的。
我的问题:你会怎么做?
答案 0 :(得分:1)
如果您不想在地址簿中添加地址,则在使用AddressBook.framework
时,只需创建记录(例如ABPersonCreate
),但不要调用ABAddressBookAddRecord
后跟{ {1}},它不会存储在您的地址簿中。只有在您明确添加和保存记录时,它才会存储在您的地址簿中。
但是,正如您所推测的那样,如果您使用ABAddressBookSave
(在AddressBookUI.framework
中编辑并保存记录或从ABPersonViewController
保存记录),则将保存在地址簿中。
如果您真的想使用ABNewPersonViewController
,理论上可以使用AddressBookUI.framework
,然后使用ABNewPersonViewController
方法ABNewPersonViewControllerDelegate
,newPersonViewController:didCompleteWithNewPerson:
不是ABRecordRef
,您可以使用NULL
删除该记录并通过ABAddressBookRemoveRecord
保存,并删除添加的记录。这对我来说是一种特别不优雅的方法,但它确实有效。
但是,如果您不需要ABAddressBookSave
,那么您可以非常轻松地创建AddressBookUI.framework
条记录,而不是明确地将它们添加到地址簿中,您就可以了。