2012-09-17 1 views
9

내 앱이 서버에 사용자의 연락처를 저장해야합니다 (물론 사용자의 허가가 있어야 함). 기기의 주소록 (변경/추가/삭제)의 변경 사항을 서버에 반영하는 것이 하나의 요구 사항 중 하나입니다.iOS 주소록 - 어떤 연락처를 추가/수정/삭제했는지 어떻게 알 수 있습니까?

응용 프로그램을 다시 시작하기 전에 변경된 주소록 연락처를 확인하는 것과 관련하여 쉬운 방법/모범 사례가 있습니까?

주소록의 변경 사항을 응용 프로그램에 알리는 콜백 메서드가 있지만 문서화 된 방법으로 추가, 편집 또는 삭제 된 연락처를 확인할 수있는 것 같습니다.

내가 지금 생각하는 바는 새로운 연락처 목록을 장치에 저장된 것과 수동으로 비교 한 다음 변경 사항을 응용 프로그램과 서버 모두에서 업데이트하는 것입니다. 그러나 사용자가 많은 양의 연락처를 가지고 있다면 너무 많은 것 같아요.

감사합니다.

+0

나는이 [유래의 대답은] (http://stackoverflow.com/questions/12348916/addressbook-synchronization-in-ios) 당신을 위해 도움이 될 것 같아요. –

답변

1

libsqlite3.dylib를 사용하여 필요한 모든 속성에 대해 생성 된 플랫 파일에 액세스하고 데이터베이스를 사용자의 장치와 주기적으로 비교하는 SQL 데이터베이스를 만듭니다. 두 데이터베이스가 abaddressbook 프레임 워크에서 필요로하는 맨손으로 필요한 것만 확보했는지 확인하십시오.

는 sqlite3를 라이브러리와 샘플 아이폰 OS 프로젝트는 여기에 있습니다 :

http://www.techotopia.com/index.php/An_Example_SQLite_based_iOS_7_Application

& 상세 여기에 상대의 다중 값 속성 ABAddressbook와 이렇게에 :

http://linuxsleuthing.blogspot.com/2012/10/addressing-ios6-address-book-and-sqlite.html

+1

이것은 매번 연락처를 반복 할 때 이상적인 방법이 아닙니다. 'ABAddressBookRegisterExternalChangeCallback'을 사용하는 것이 더 낫습니다. – Mrug

2

당신이이 ABAddressBookRegisterExternalChangeCallback 클래스를 등록하고 ABAddressBookRef와 콜백 ("addressBookDidChang 내 예에서 전자 ")

ABAddressBookRef addressBook = //... 

ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookDidChange(__bridge_retained void *)self); 

void addressBookDidChange(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) 
{ 
    //Something changed from last application launch, insert your logic here... 

    //If you want to handle it in a "Objective-C" method you can do something like: 
    [((__bridge ABManager*) context) yourObjectiveCMethod]; 

} 
+2

주소록에서 어떤 문제가 발생했는지 계속 알려줍니다 - 어떤 연락처를 추가/편집/삭제 했습니까? –

+1

@VenuGopalTewari 연락처를 저장 한 다음 콜백에서 추출한 연락처와 비교할 수 있습니다. addressBookDidChange – andreacipriani

+0

좋은 논리 또는 예제 또는 샘플 코드를 제안 할 수 있습니까? – Ayaz

관련 문제