我正在开发一个需要Addressbook
记录的应用程序,我需要所有联系人的详细信息,而且我正在使用谷歌服务获取长期的联系地址并将此详细信息存储到SQLite。
现在问题是:
1)。哪一个是更好的选择,在SQLite中存储联系人的唯一记录标识符或存储联系人的所有详细信息?
2)。如果您的答案是标识符,那么此唯一记录标识符每次都会引用相同的记录吗?
答案 0 :(得分:2)
<强> 1)。哪一个是更好的选择,在SQLite中存储联系人的唯一记录标识符或存储联系人的所有详细信息?
我想说不需要存储整个数据,因为它已经存储在设备中,因此可以使用简单的标识符。
<强> 2)。如果你的答案是标识符,那么这个唯一的记录标识符每次都会引用相同的记录吗?
是的,每次都必须引用相同的记录,这就是它是唯一标识符的原因。
此外,我建议直接从源代码阅读AddressBook框架中的唯一标识符部分:Apple Address Book Programming Guide
希望有所帮助。
答案 1 :(得分:2)
ABRecordID a.k.a.唯一标识符是识别每条记录的好方法。但是,Apple文档确实指出了有关此API返回的ABRecordID的一些值得注意的要点。
通讯簿数据库中的每条记录都有唯一的记录标识符。除非删除该记录或重置数据,否则此标识符始终引用相同的记录。记录标识符可以在线程之间安全地传递。不保证它们在不同设备上保持不变。
因此,回答你的问题 1)。哪一个是更好的选择,在SQLite中存储联系人的唯一记录标识符或存储联系人的所有详细信息?
我建议您存储在SQLite DB中的最小细节是:名字,姓氏,创建日期和记录ID
原因是,苹果文档中再次提到:
保持对特定记录的长期引用的推荐方法是除了标识符之外还存储名字和姓氏,或者名字和姓氏的哈希值。按ID查找记录时,请将记录的名称与存储的名称进行比较。如果它们不匹配,请使用存储的名称查找记录,并存储记录的新ID。
请注意,我已经在sqLite数据库中插入了创建日期,因为用户可能会更改联系人的姓名,但即使在设备 RESET 上,创建日期也保持不变。
2)。如果你的答案是标识符,那么这个唯一的记录标识符每次都会引用相同的记录吗?
在解释您的第一个问题时,我想我也回答了这个问题。
Though I have pasted most of the content here, its always advised to read the documentation
答案 2 :(得分:1)
地址簿唯一标识符始终不相同。如果您运行某些同步应用程序(如TAPP地址簿的谷歌联系人),它可能会更改,因为它会删除联系人并再次添加。最好的方法是生成一些哈希代码,比如组合所有属性,然后检查db,如果一个不匹配,则从sqlite中删除不匹配并在db中添加新的。
请记住,如果您使用的是单个设备,那么ID就没问题了。但如果您的联系人正在与任何设备服务器(如mac)进行通信。那么你需要找到一个更好的解决方案。我找到了一个我提到的。
答案 3 :(得分:0)
记录标识符始终引用相同的记录,除非删除该记录或重置数据。不保证跨设备保持不变。 Address Book Programming Guide for iOS更喜欢
保持对特定记录的长期引用的推荐方法是除了标识符之外还存储名字和姓氏,或者名字和姓氏的哈希值。按ID查找记录时,请将记录的名称与存储的名称进行比较。如果它们不匹配,请使用存储的名称查找记录,并存储记录的新ID。