2014-07-14 30 views
0

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

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

核心数据自动执行吗?它是否为我默认创建的任何数据模型创建了一个键?如果是这样,我可以访问它并利用它吗?如果我删除一行会发生什么?

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

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

+0

你是否需要该“索引”属性才能获得随机数据?或者它也有其他用途? – iAmd

+0

只是为了获得随机数据,因为如果我随机在联系人ID,我从地址簿中获得,有很高的机会,我会得到无效的ID,我将不得不寻找其他的ID,这可能会使用一段时间。 –

回答

1

对于第1部分:

写读取请求,将返回所有联系人实体。然后用-countForFetchRequest:来确定你有多少。

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

现在写另一个取指令请求与-fetchOffset等于随机整数,且1.

fetchLimit对于第2部分: 为ABExternalChangeCallback文档没有列出,将表示哪个对象改变任何参数。但是,您可以按kABPersonModificationDateProperty对地址簿进行排序,并查看自上次同步以来更改的记录。

+0

我得到了那部分,谢谢。 当地址簿更新后,如果我想用我更新的地址簿覆盖整个核心数据文件,我该怎么做? –

+0

最简单的方法是用新名称从头开始重新创建数据文件。然后关闭旧的,移动新的,然后重新打开。如果您的重建因任何原因失败,您的原始数据仍然完好无损,您可以再试一次。 –