0

有没有办法确定哪些联系人记录已被修改或添加到 IPhone 上的 AddressBook.sqlitedb。我的意思是我希望我的应用程序读取 AddressBook.sqlitedb 并确定从我上次读取数据库时起哪些联系人记录已添加或修改到 AddressBook.sqlitedb?他们是否在每个表中维护某种时间戳字段来存储记录的添加或更改时间?

基本上我的问题是,当我的应用程序没有运行时,用户可以在他的 Iphone 上添加/修改联系人。现在,当我的应用程序启动时,它将如何确定发生了哪些变化?我不想在我的应用程序中存储 AddressBook.sqlitedb 的本地副本并将其与 Iphone 的原始 AddressBook.sqlitedb 进行比较。必须有一些更聪明的选择来完成它。请帮助各位。

4

2 回答 2

2

是的,添加或修改有一个时间戳。

属性是:

NSString * const kABCreationDateProperty;
NSString * const kABModificationDateProperty;

但更好的方法是使用 ABAddressBookRegisterExternalChangeCallback。

void ABAddressBookRegisterExternalChangeCallback (
   ABAddressBookRef addressBook,
   ABExternalChangeCallback callback,
   void *context
);

你可以在这里找到更多细节:

http://developer.apple.com/library/ios/#documentation/AddressBook/Reference/ABAddressBookRef_iPhoneOS/Reference/reference.html

希望它有帮助,shani

于 2010-12-20T07:05:30.313 回答
0

除非您的 iPhone 越狱,否则您无法直接访问 sqlite DB,因此这是不可能的。我会想象(我不确定)ABRecordID返回的ABRecordGetRecordID()是长期有效的。要存储联系人的记录,您可以存储ABRecordID,然后在需要时查找该联系人的属性。如果您有更复杂的需求(例如按属性搜索/排序),则必须以某种方式自己实现。

于 2010-12-09T06:51:53.337 回答