2013-09-27 42 views
2

如果對AddressBook數據庫進行了任何更改,我正在使用ABAddressBookRegisterExternalChangeCallback進行註冊。我對它工作正常,能夠收到通知,但只有在應用程序運行時才能使用。即使應用程序終止,ABAddressBookRegisterExternalChangeCallback也可以工作

一旦應用程序被終止並終止,然後重新啓動,它將無法識別殺死和重新啓動之間的更改。

有沒有辦法檢測到這些變化,或者是否被設計成以這種方式工作?我使用

示例代碼 -

在viewDidLoad中

-

CFErrorRef error = NULL; 

addressBook = ABAddressBookCreateWithOptions(NULL, &error); 

ABAddressBookRegisterExternalChangeCallback(addressBook,addressBookChanged,(__bridge void *)(self)); 

而且回調

void addressBookChanged(ABAddressBookRef reference, CFDictionaryRef dictionary, void *context) { 
NSLog(@"There was a change in the addressbook"); 

回答

1

沒有,這些警報將只在您的應用程序是活動的接收。

可能iOS7支持後臺處理將允許進行某種監控,但可能不使用此回調。

0

我正在嘗試爲此問題製作一些解決方案,並且正在考慮使用此回調,並在其他地方和應用啓動時存儲地址簿的大小,比較其大小以確定是否發生了更改。我假設大多數變化可能會導致這種或那種規模的小差異。在這兩者之間,我認爲可能存在一個不完美但可以通過的解決方案。

+0

我在這方面做了一個強有力的頭腦風暴。並且存儲大小將不起作用。如果它是+1和-1會怎麼樣。尺寸變化將爲零,但聯繫人發生變化。我處理這個問題的方式是使用核心數據。將所有已同步/已使用的聯繫人存儲在coredata模型中,每個聯繫人都有一個ID,然後您可以將其與ABAddressBook中的內容進行比較。 – VaibhavAggarwal

+0

是的,這樣做更有意義 - 但是不能測量地址簿文件的實際大小,而不是僅僅是聯繫人的數量 - 這是一種更加細膩的東西。儘管這在理論上不完美,但它幾乎可以用於任何可能的情況,但請準確衡量變化。 – Karoh

+0

問題的根本在於你無法確定其大小。相同數量的字節可以被刪除和寫入。將每個聯繫視爲一個實體,您需要能夠爲每個實體找出每個領域的差異。而且,只有在將某個數據的以前版本存儲在某處才能與之進行比較時,您只能這樣做。 – VaibhavAggarwal

相關問題