创建仅限本地的ABPersonRef - 即不同步交换

时间:2014-10-28 14:22:37

标签: ios abaddressbook

我正在开发一个同步来自Microsoft Exchange的联系人数据的联系人管理应用程序。

我希望能够在iOS地址簿中创建仅为本地联系人的联系人 - 即它们只存在于设备上,不会同步到Microsoft Exchange。

我假设我可以使用ABPersonCreateInSource创建联系人,但事实证明该函数需要特定的来源来创建联系人。但是不可能创建一个源(即你可以'只是创建“本地”源。您需要枚举设备上的现有源。

我发现如果您要将设备与交换同步,那么您将拥有一个或多个kABSourceTypeExchange来源,但没有本地来源。但是,如果您没有交换源,那么您将kABSourceTypeLocal作为源。

是否有人知道如何创建仅限本地的联系人,以及在设备上配置了交换帐户的情况下哪些联系人不会与Microsoft Exchange同步?

1 个答案:

答案 0 :(得分:0)

我最近遇到了这个问题,我现在这是一个老帖子,因为网上没有直接答案,我会留下2美分给任何有这个问题的人。

你可以创建一个本地唯一的联系人,我发现创建这个联系人并不是一个好主意,在iphone 4上本地联系人不会出现在任何组中,但如果显示所有联系人,可能会在iphone 5及更高版本上找到,如果显示所有联系人,则无法找到任何组中的这些联系人,并且访问这些联系人的唯一方法是通过最近的呼叫日志来显示联系信息,或者手动搜索联系人,因为它不会显示在快速搜索

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, nil);
ABRecordRef nativebook = ABAddressBookGetSourceWithRecordID(addressBookRef, kABSourceTypeLocal);
ABRecordRef myLocalContact = ABPersonCreateInSource(nativebook);
CFRelease(nativebook);
//... fill the contact and save it to the addressbook.
CFErrorRef error = NULL;
ABAddressBookAddRecord(addressBookRef, myLocalContact, &error);
ABAddressBookSave(addressBookRef, &error);
CFRelease(addressBookRef);

这些联系人不会与交换帐户同步。我强烈建议不要将它们添加到本地联系人,而是将其添加到工作的iCloud帐户,这样联系人就不会在交换帐户上显示联系人,并且可以随时删除此联系人。