Iphone 与人交往的正确方式是什么?

Iphone 与人交往的正确方式是什么?,iphone,Iphone,在我的许多应用程序中,它需要将一些数据与通讯录中的联系人相关联。我以前做的是保存一个人的记录id,并在每次应用程序启动时使用该id提取信息。然而,我越来越多地发现这种方法是错误的,因为很多时候用户会使用像mobileme这样的服务,其中地址簿被擦除并重新同步。这会导致记录id更改,并且所有关联都会丢失。用户必须逐一检查并重新链接它们 保存指向通讯簿条目的健壮指针的更好方法是什么?如果通讯簿确实正在完全擦除和重新加载,并且唯一不变的部分是显示名称,那么将显示名称存储为链接似乎是唯一的选项。您应该存

在我的许多应用程序中,它需要将一些数据与通讯录中的联系人相关联。我以前做的是保存一个人的记录id,并在每次应用程序启动时使用该id提取信息。然而,我越来越多地发现这种方法是错误的,因为很多时候用户会使用像mobileme这样的服务,其中地址簿被擦除并重新同步。这会导致记录id更改,并且所有关联都会丢失。用户必须逐一检查并重新链接它们


保存指向通讯簿条目的健壮指针的更好方法是什么?

如果通讯簿确实正在完全擦除和重新加载,并且唯一不变的部分是显示名称,那么将显示名称存储为链接似乎是唯一的选项。

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

1) 如果记录ID没有更改,那么您就可以使用它来定位正确的记录

2) 如果
ABAddressBookGetPersonWithRecordID()
没有找到存储的记录ID的记录(返回NULL),则需要根据姓名搜索人员记录以查找匹配项。您可以直接使用
ABAddressBookCopyPeopleWithName()。查找新记录取决于您。找到新记录后,可以使用新记录ID更新数据存储


最终,您将存储记录ID以直接使用,以防它不会更改(如果幸运的话),并存储通讯簿条目中不太可能更改的一些键。与通讯簿条目关联的人员或组织的名称最有可能更改。当然,您应该考虑这样的情况,即您可能无法找到具有存储的记录ID的记录,或者通过搜索名称来查找记录。这可能意味着记录被删除,也可能意味着记录被重命名。您应该以最适合您的特定应用程序的方式处理该情况。

我知道这是去年的事,但是,我想我可以建议使用一种方法。当我第一次要求用户选择联系人时(为了将我的应用程序的某些私人数据与之关联),我会抓取记录,创建自己的内部记录id(通常是应用程序名称的首字母缩写和序列号),通过添加新的ABRelatedName(类型为“pref”名称或“Other”)修改联系人我自己的内部记录id的值。它在.vcf中看起来像这样

item3.X-ABRELATEDNAMES;type=pref:BZA101
item3.X-ABLabel:_$!<Other>!$_
项目3.X-相关名称;type=pref:BZA101
项目3.X-ABLabel:$$_
这样,当我添加更多关于用户的数据时,例如应用程序用户上次联系他们的时间等,我可以简单地引用该记录id。这些数据似乎对我有用

希望这能帮助别人