我的应用程序需要在我们的服务器上存储用户的联系人(当然,在获得用户许可的情况下。)其中一个要求是将设备地址簿(添加/编辑/删除)的任何更改反映到服务器。
在重新启动应用程序之前,是否有一种简单的方法/最佳实践来确定哪些地址簿联系人已更改?
我只能看到回调方法来通知应用程序地址簿中的更改,但似乎没有记录的方法来确定添加,编辑或删除哪些联系人。
我现在想的是手动将新的联系人列表与存储在设备上的联系人列表进行比较,然后更新应用程序和服务器的更改。但我认为,如果用户有大量的联系人,那可能会太多。
谢谢!
答案 0 :(得分:2)
您必须使用ABAddressBookRegisterExternalChangeCallback注册您的类,并传递ABAddressBookRef和回调(" 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];
}
答案 1 :(得分:1)
查看使用libsqlite3.dylib并创建一个sql数据库,该数据库将访问为所需的所有属性生成的平面文件,然后定期将数据库与用户的设备进行比较。确保两个数据库仅从abaddressbook框架中获取您需要的必需品。
带有sqlite3库的示例iOS项目位于:
http://www.techotopia.com/index.php/An_Example_SQLite_based_iOS_7_Application
&安培; 有关联系人的多值属性的ABAddressbook这样做的详细信息:
http://linuxsleuthing.blogspot.com/2012/10/addressing-ios6-address-book-and-sqlite.html