2014-02-06 38 views
0

我正在創建一個應用程序,用於在某些重寫操作中更新來自sqlite數據庫的聯繫人。我以前每次用戶登錄時都會在用戶的許可下從iPhone的地址簿中獲取聯繫人,並將其插入到主線程的數據庫中。Xcode中的通訊錄修改日期

我不想在用戶登錄時將iphone聯繫人每次都插入數據庫,因爲它超過登錄時間,如果iPhone的地址簿沒有修改,所以數據庫插入發生在每個地方洛。

這是我如何獲取聯繫人

NSArray *thePeople = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(_addressBook); 


    NSMutableArray * _allPeoplesDictArr = [NSMutableArray array]; 
    for (id person in thePeople) 
    { 
     ABMultiValueRef phones =(__bridge ABMultiValueRef)((__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(person), kABPersonPhoneProperty)); 

     NSString* name = (__bridge NSString *)ABRecordCopyCompositeName((__bridge ABRecordRef)(person)); 

     ABRecordRef record = (__bridge ABRecordRef)[thePeople objectAtIndex:loop]; 


     if(ABRecordGetRecordType(record) == kABPersonType) // this check execute if it is person group 
     { 
      ABRecordID recordId = ABRecordGetRecordID(record); // get record id from address book record 

      recordIdString = [NSString stringWithFormat:@"%d",recordId]; // get record id string from record id 

      NSDate *modificationDate = (__bridge NSDate*) ABRecordCopyValue(record, kABPersonModificationDateProperty); 
      NSLog(@"modificationDate %@",modificationDate); 

      firstNameString = (__bridge NSString*)ABRecordCopyValue(record,kABPersonFirstNameProperty); // fetch contact first name from address book 
      lastNameString = (__bridge NSString*)ABRecordCopyValue(record,kABPersonLastNameProperty); // fetch contact last 

      NSLog(@"%@",firstNameString); 
     } 

    } 

我正在修改日期,可以在陣列管理,但我怎麼知道我何時退出或終止應用程序數組改變了。

還有另一種方法,我可以匹配每個聯繫人修改日期從我的插入或創建日期出現在我的sqlite數據庫中,但仍然比較將需要時間。

所以沒有任何方法來檢查整個MD5CheckSum或地址簿,而不是比較每個聯繫人的創建日期和插入日期。如果地址簿MD5CheckSum被修改,所以插入或更新需要發生其他不要。

回答

2

你運氣不好。如果你終止你的應用程序,那麼沒有公共API讓你知道有變化。完成所有聯繫將是必要的,因爲您無法通過其他方式瞭解有關更改的信息。

請確保在https://bugreport.apple.com打開功能請求,讓他們知道您需要什麼API。在問題中發佈錯誤報告編號,以便人們可以複製雷達。

從另一個答案的評論,這裏是複製一個雷達:rdar:// 16154022(感謝oski555