2009-11-19 43 views
4

在我的许多应用程序中,它需要将某些数据与地址簿中的联系人相关联。我之前做的是保存ABPerson的记录ID,并使用该ID在每次应用启动时提取信息。然而,越来越多的我发现这种方法是错误的,因为很多时候,用户将使用诸如移动地址簿被擦除和重新生成的服务。这会导致记录ID发生更改,并且所有关联都会丢失。用户必须通过每一个并重新链接它们。与ABPerson关联的正确方法是什么?

什么是更好的方法来保持一个健壮的指针地址簿条目?

回答

5

您应该存储三个值:记录ID,名字和姓氏。

1)在记录ID没有变化的情况下,你是黄金 - 只需使用它来找到正确的记录。

2)如果ABAddressBookGetPersonWithRecordID()没有找到您存储的记录ID(它返回NULL)的记录,那么您需要根据姓氏和名字搜索匹配记录。如果已经有一个包含所有人员记录的阵列,则可以使用ABAddressBookCopyPeopleWithName()潜在地或者编写自己的定位代码。查找新记录取决于您。一旦找到新记录,您可以使用新记录ID更新数据存储。

最终,您最终会直接存储要使用的记录ID,以便它不会更改(如果幸运的话),以及存储地址簿条目中不太可能更改的某些密钥。与地址簿条目关联的人员或组织的名称最有可能发生变化。当然,您应该考虑您可能无法找到存储了记录ID的记录或通过搜索名称的情况。这可能意味着记录被删除,或者可能意味着该记录被重命名。无论您决定哪种方式最适合您的特定应用,您都应该处理该案例。

0

如果地址簿确实被完全擦除并重新加载,并且唯一不会改变的部分是显示名称,那么将显示名称存储为链接似乎是唯一的选择。

2

我知道这是去年,但是,我想我可能会提出一种我使用的方法。我第一次要求用户选择一个联系人(为了将我的应用程序的某些私人数据与它联系起来),然后抓取记录,创建我自己的内部记录ID(通常是应用程序名称的首字母和序列号)通过添加我自己内部记录ID的新ABRelatedName(“其他”的“前缀”名称的类型)值来修改联系人。它看起来像这样的的.vcf

item3.X-ABRELATEDNAMES;type=pref:BZA101 
item3.X-ABLabel:_$!<Other>!$_ 

这样的话,我可以简单地引用记录ID,当我添加有关用户的更多数据,如最后一次应用的用户联系他们,等似乎对于工作我。

希望能帮助别人。

+0

这不适用于iOS?还是仅Mac OS X? – 2013-01-17 19:08:51

相关问题