如果對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和-1會怎麼樣。尺寸變化將爲零,但聯繫人發生變化。我處理這個問題的方式是使用核心數據。將所有已同步/已使用的聯繫人存儲在coredata模型中,每個聯繫人都有一個ID,然後您可以將其與ABAddressBook中的內容進行比較。 – VaibhavAggarwal
是的,這樣做更有意義 - 但是不能測量地址簿文件的實際大小,而不是僅僅是聯繫人的數量 - 這是一種更加細膩的東西。儘管這在理論上不完美,但它幾乎可以用於任何可能的情況,但請準確衡量變化。 – Karoh
問題的根本在於你無法確定其大小。相同數量的字節可以被刪除和寫入。將每個聯繫視爲一個實體,您需要能夠爲每個實體找出每個領域的差異。而且,只有在將某個數據的以前版本存儲在某處才能與之進行比較時,您只能這樣做。 – VaibhavAggarwal