2014-02-06 8 views
0

일부 재 작성 작업에서 sqlite 데이터베이스의 연락처를 업데이트하는 데 사용하는 응용 프로그램을 만들고 있습니다. 사용자가 로그인 할 때마다 사용자의 허가로 iPhone의 주소록에서 연락처를 가져 와서 주 스레드의 데이터베이스에 삽입하는 데 사용되었습니다.주소록 수정 날짜 Xcode에서

아이디 연락처가 로그인 시간을 초과하면 데이터베이스에 매번 아이폰 연락처를 삽입하고 싶지 않습니다. 또한 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 또는 주소록을 확인하는 방법이 없기 때문에 모든 연락처 작성 날짜와 삽입 날짜를 전체적으로 비교할 필요가 없습니다. 그리고 Addressbook MD5CheckSum이 수정되어 삽입 또는 업데이트가 필요하지 않으면 다른 방법은 없습니다.

답변

2

운이 없습니다. 애플리케이션을 종료하면 변경 사항이 있음을 알려주는 공개 API가 없습니다. 변경 사항을 듣는 다른 방법이 없기 때문에 모든 연락처를 검토해야합니다.

기능 요청을 https://bugreport.apple.com으로 열어 필요한 API를 알려주세요. 사람들이 레이더를 복제 할 수 있도록 버그 보고서 번호를 questio에 게시하십시오. rdar : // 16154022 (감사 oski555)

다른 답변의 의견에서

, 여기에 복제 할 수있는 레이더