2014-07-16 5 views
0

핵심 데이터 파일에있는 모든 데이터를 제거하고 업데이트 된 주소록을 핵심 데이터로 다시 쓰는 가장 좋은 방법은 무엇입니까? 핵심 데이터에서 데이터를 덮어 쓰는 방법이 있습니까? 좋은 연습으로 어떻게이 일을 할 수 있습니까?AddressBook으로 코어 데이터 동기화하기

내 주소록과 핵심 데이터 파일을 동기화 할 수있는 방법 중 하나는 주소록에서 변경된 사항을 확인하고 해당 변경 사항에 따라 핵심 데이터에서 레코드를 삭제하거나 추가하는 것입니다. 편집 된 레코드에 신경 쓰지 마십시오.) 한 가지 방법은 핵심 데이터가있는 SQLite 파일에서 모든 데이터를 삭제하고 업데이트 된 주소록을 동일한 파일에 다시 저장하는 것입니다.

답변

0

this blog post from Brent Simmonsmy comment on my answer to your previous question을 참조하십시오.

코어 데이터 저장소에서 많은 수의 개체를 삭제하는 것은 비용이 많이 듭니다. 각각의 NSManagedObject를 가져 와서 인스턴스화 한 다음 삭제 한 다음 코어 데이터 스택에 변경 사항을 적용해야합니다. 이 프로세스는 단순한 SQL DELETE가 취하는 것보다 많은 시간이 걸립니다.

핵심 데이터 저장소에 보존해야하는 다른 데이터가있는 경우 문제가 발생합니다. 이런 식으로해야합니다. 그러나 데이터 저장소를 날려 버리고 다시 시작하면 훨씬 빨라집니다. 현재 주소록 데이터로 새 코어 데이터 저장소를 만듭니다. 저장해. 기존 데이터 저장소를 닫습니다. 새 데이터 저장소를 이전 위치로 이동합니다 (또는 파일 경로를 새 저장소 경로로 변경).

iOS 8의 일괄 업데이트 기능으로 인해이 프로세스가 빨라질 수 있습니다.

+0

Addressbook은 어떤 종류의 변경 사항이 발생했는지 알려주지 않으며 핵심 데이터 파일을 쉽게 덮어 쓸 수 없기 때문에 상당히 실망 스럽습니다. 그래서 수동으로 내 주소록에서 추가/삭제 된 행을 검색하고이를 내 핵심 데이터 파일과 비교해야하며 변경에 따라 주소록에서 추가/삭제해야합니다. 그게 최선의 방법은? 참고 : 내 핵심 데이터 파일은 모든 주소록 연락처 ID와 부울 속성으로 구성됩니다. 그것은 나중에 확장 될 수 있지만 지금은 그것이 어떻게되어 있습니다. –

+0

나는 그것이 일반적으로 최선의 방법이라고 생각한다. 백그라운드 스레드 (또는 -performBlock)에서 수행하여 UI 방해를 최소화하십시오. 수정 날짜를 사용하십시오! 또한 고유 정보는 핵심 데이터 외부에서 가장 잘 수행된다는 점도 기억하십시오. –

관련 문제