2010-12-09 4 views
0

연락처 레코드가 수정되거나 IPhone의 AddressBook.sqlitedb에 추가되었는지 확인하는 방법이 있습니까? 내 응용 프로그램이 AddressBook.sqlitedb를 읽고 어떤 연락처 레코드가 추가되었거나 마지막으로 데이터베이스를 읽었을 때 AddressBook.sqlitedb로 수정했는지 확인하고 싶습니다. 레코드의 추가 또는 변경 시간을 저장하는 각 테이블에 일종의 타임 스탬프 필드를 유지합니까?아이폰의 AddressBook.sqlitedb는 어떤 연락처 레코드가 언제 추가되거나 수정되었는지를 결정하는 타임 스탬프 열을 유지합니까?

내 문제는 기본적으로 내 응용 프로그램이 실행되고 있지 않을 때 사용자가 아이폰에 연락처를 추가/수정할 수 있다는 것입니다. 이제 애플리케이션이 시작될 때 어떤 변화가 일어 났는지를 어떻게 결정할 것인가? 난 내 애플 리케이션에 AddressBook.sqlitedb의 로컬 복사본을 저장하고 아이폰 원래 AddressBook.sqlitedb와 비교 donot 싶어요. 그것을 성취하기 위해 더 똑똑한 선택이 있어야합니다. 제발 도와주세요.

답변

0

귀하의 아이폰이 jailbroken하지 않는 한 직접 sqlite DB에 액세스 할 수 없으므로 그 점은 궁금합니다. 나는 에 의해 반환 된 ABRecordID이 장기간 유효하다는 것을 나는 확신 할 수 없다. 연락처 레코드를 저장하려면 ABRecordID을 저장 한 다음 필요할 때 해당 연락처의 속성을 검색 할 수 있습니다. 보다 복잡한 요구 (예 : 속성 별 검색/정렬)가 있다면 어떻게 든 구현해야합니다.

2

예, 추가 또는 수정을위한 타임 스탬프가 있습니다.

속성은 다음과 같습니다

NSString * const kABCreationDateProperty; 
NSString * const kABModificationDateProperty; 

하지만 더 좋은 방법이 ABAddressBookRegisterExternalChangeCallback을 사용하는 것입니다.

void ABAddressBookRegisterExternalChangeCallback (
    ABAddressBookRef addressBook, 
    ABExternalChangeCallback callback, 
    void *context 
); 

여기에 더 deatails을 찾을 수 있습니다

http://developer.apple.com/library/ios/#documentation/AddressBook/Reference/ABAddressBookRef_iPhoneOS/Reference/reference.html

그것이 hepls, 앱이 배경에없는 경우

+0

는 콜백이 작동하지 않습니다 샤니 바랍니다. – Eric