2010-10-12 62 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){

    刷新數據庫!!!!

    }

相關問題