iOS通讯簿-如何知道添加/编辑/删除了哪个联系人?

iOS通讯簿-如何知道添加/编辑/删除了哪个联系人?,ios,objective-c,abaddressbook,Ios,Objective C,Abaddressbook,我的应用程序需要在我们的服务器上存储用户的联系人(当然,如果用户允许的话)。它的要求之一是将设备通讯簿上的任何更改(添加/编辑/删除)反映到服务器上 在重新启动应用程序之前,是否有一种简单的方法/最佳做法来确定哪些通讯簿联系人已更改 我所能看到的只是通知应用程序通讯簿发生更改的回调方法,但似乎没有文档化的方法来确定添加、编辑或删除了哪些联系人 我现在想的是手动将新联系人列表与设备上存储的联系人列表进行比较,然后更新应用程序和服务器的更改。但我认为,如果用户有大量联系人,这可能太多了 谢谢 研究如

我的应用程序需要在我们的服务器上存储用户的联系人(当然,如果用户允许的话)。它的要求之一是将设备通讯簿上的任何更改(添加/编辑/删除)反映到服务器上

在重新启动应用程序之前,是否有一种简单的方法/最佳做法来确定哪些通讯簿联系人已更改

我所能看到的只是通知应用程序通讯簿发生更改的回调方法,但似乎没有文档化的方法来确定添加、编辑或删除了哪些联系人

我现在想的是手动将新联系人列表与设备上存储的联系人列表进行比较,然后更新应用程序和服务器的更改。但我认为,如果用户有大量联系人,这可能太多了


谢谢

研究如何使用libsqlite3.dylib并创建一个sql数据库,该数据库将访问为所有所需属性生成的平面文件,然后定期将您的数据库与用户的设备进行比较。确保这两个数据库只从abaddressbook框架中获取您需要的基本必需品

带有sqlite3库的iOS项目示例如下:

& 有关使用ABAddressbook for contact的多值属性执行此操作的详细信息,请参见:


您必须通过传递ABAddressBookRef和回调(“我的示例中的addressBookDidChange”)来注册类


我认为这可能对你有帮助。这不是每次迭代联系人的理想方式。。更好的方法是使用
ABAddressBookRegisterExternalChangeCallback
它告诉我们addressbook出现了一些问题,但仍然没有回答-哪个联系人被添加/编辑/删除了?@VenugoPaltwari您可以在之前保存您的联系人,然后将其与回调AddressBookDidChange中提取的联系人进行比较。您能提出一些建议吗良好的逻辑或示例或任何示例代码。
ABAddressBookRef addressBook = //...

ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookDidChange(__bridge_retained  void *)self);

void addressBookDidChange(ABAddressBookRef addressBook, CFDictionaryRef info, void  *context)
{
    //Something changed from last application launch, insert your logic here...

    //If you want to handle it in a "Objective-C" method you can do something like:
    [((__bridge ABManager*) context) yourObjectiveCMethod];

}