2010-10-12 109 views

回答

3

有没有一种简单的方法来获得通讯录中的“新联系人”。相反,你必须这样做:

  1. Get an array of all the contacts in the address book
  2. 循环访问数组并查看联系人是否在数据库中。 (注意:记录ID can change!)
  3. 如果您发现不在数据库中的联系人,请添加它。

将财产的last modification date存储并与每条记录进行比较可能会很明智,因此您可以知道现有记录中是否发生了变化。

最后,这可能需要一段时间,具体取决于用户的联系人数量。这可能是你想要做的事情,而不会阻止用户界面。 (另请注意:地址簿类型不是线程安全的,请记住,如果您在后台线程中工作)。

在您的应用运行时,您可以注册address book change notification callback以提醒您发生的变化应用正在运行。

+0

所以基本上我必须启动一个线程,并把这个逻辑里面?什么是启动此线程的最佳位置(方法)?我的视图控制器的viewDidLoad方法?感谢您的宝贵帮助。 – Chiron 2010-10-12 11:24:01

+0

如果不了解更多关于您的应用的信息,很难说,通常这类事情会在您的应用代理启动后启动。这不是你正在做的,但苹果的SeismicXML演示应用程序(https://developer.apple.com/library/ios/#samplecode/SeismicXML/Introduction/Intro.html)在单独的线程中工作,并通知主线程发现更改时。这将是一个很好的模式。 – 2010-10-12 13:52:45

0

小更简单的方法(不需要太多的内存空间):

  1. 保存您的应用程序的数据库中获得最新的时间戳,当您从通讯录&总人数加载数据。

  2. 写检查功能,并调用它,只要你需要它

  3. 检查功能:获取最新修改日期的所有联系人,而现在得到的总数,只是时间戳比较最新的日期:

    BOOL beNeedRefresh = NO;

    如果(最新>时间戳){

    beNeedRefresh = YES;

    }否则,如果(地址簿数=你的数据库计数!){

    beNeedRefresh = YES;

    }

    如果(beNeedRefresh){

    刷新数据库!!!!

    }

相关问题