地址簿和核心数据

我试图做一个应用程序,将地址簿联系人的ID存储到一个SQLite文件使用核心数据。

我的问题是我想要随机请求这些ID,并且联系人ID是不可靠的,因为联系人ID可能存在差距,所以我想有一种索引属性,我可以做我的随机,永远不会在索引中有差距,如果我从我的数据库中删除一些ID,我想确保索引是重新索引(不知道如果索引是正确的名称,也许是一个关键)。

核心数据是否自动实现? 它是否创build了我默认创build的任何数据模型的关键? 如果是这样,我可以访问并利用它吗? 如果我删除一行会怎么样?

对不起,这可能是一个初步的问题。

另外,当地址簿更改ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookChanged, *context)时更新我的​​SQLite文件最好的办法是什么? 我将不得不重写整个地址簿到我的SQLite?

对于第1部分:

编写一个将返回所有联系人实体的提取请求。 然后使用-countForFetchRequest:确定你有多less。

在实体数量范围内生成一个随机整数。

现在再写-fetchOffset等于随机整数的另一个获取请求,并fetchLimit 1的fetchLimit

对于第2部分: ABExternalChangeCallback的文档没有列出任何将指示哪些对象发生更改的参数。 但是,您可以通过kABPersonModificationDateProperty对地址簿进行sorting,并查看自上次同步以来更改的logging。