2012-10-24 2 views
1

웹 서비스를 사용하여 채워지는 CoreData 기반 앱이 있습니다. 사용자가 웹 서비스의 객체에 대한 데이터를 변경하면 해당 변경을 다시 웹 서비스로 푸시하려고합니다.CoreData 변경 사항을 웹 서비스로 푸시하는 가장 좋은 방법은 무엇입니까?

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 내가 보낼 필요가 많은 변경 개체를 가질 수 있지만 사용자가 연결이 없을 수도 있고 그것을 백그라운드에서 일어나길 원할 수도 있습니다.

CoreData에서 개체에 플래그를 지정하고 원격으로 저장해야합니까? 그리고 가능하다면 몇 분 간격으로 배치하십시오. Flurry와 Google 웹 로그 분석을 사용하여 이러한 작업을 수행해야하지만 가장 좋은 방법은 무엇인지 잘 모릅니다.

코어 데이터에 EntityName과 ObjectID가 포함 된 별도의 테이블이 필요합니까?

+0

작년에 게시 한이 답변을 살펴보십시오. http://stackoverflow.com/questions/5035132/how-to-sync-iphone-core-data-with-web-server-and-then-push- to-other-devices/5052208 # 5052208 – chris

답변

2

그것은 서버 API하고 원하는 정보의 종류에 다소 의존한다.

핵심 데이터 엔티티에 수정 플래그 또는 날짜를 추가하는 것은 간단한 방법입니다. 플래그가 YES 인 모든 오브젝트 또는 날짜가 최종 동기화보다 최근 인 모든 오브젝트를 찾으십시오. 그것은 제한적입니다 - 당신이 객체를 삭제했다는 것을 서버에 알리는 것을 어떻게 처리합니까? 아마도 어떤 종류의 외부 로그를 유지해야 할 것입니다. 예를 들어, 전송 대기중인 변경 사항을 포함하는 plist입니다.

가 내가 사용했습니다

범용 방식이 같은 간다 :

  1. NSManagedObjectContextWillSaveNotification이 통지가 수신
  2. 에 대한 관찰자 추가를 찾을 deletedObjectsinsertedObjects, updatedObjects에 대한 관리 객체를 요청하고, 무슨 일이 일어나는지.
  3. 이러한 결과에 따라 발신 변경 plist를 업데이트하십시오.
  4. 동기화 할 때 plist를 읽고 변경 사항을 보내고 목록을 0으로 만듭니다 (변경 사항을 보내지 않고 실수로 0을 만들지 않도록 did-save 알림과 동기화되어 있는지 확인하십시오).

길을 따라 실행해야 할 몇 가지 세부 사항이 있습니다. 예를 들어, 동기화가 실패 할 경우 송신 변경 목록을 지우지 마십시오.

+0

삭제 된 개체 문제로 인해 문제가 발생했다는 것을 알기 시작했습니다. 변경된 객체의 로그를 유지하고이를 사용하여 내 서버에 알릴 것이라고 생각하십시오. 내 로그에서 참조 된 개체를 찾을 수없는 경우 해당 개체가 삭제되었으며 그 개체를 서버에 알릴 수 있습니다. – Slee

2

NSIncrementalStore, 특히 AFIncrementalStore (NSIncrementalStore를 사용)를 살펴보십시오.

좋은 기사 모두 여기 토론 : http://nshipster.com/nsincrementalstore/

+0

매우 재미있어 보이지만 완전한 리모트 1 개가있는 내 로컬 데이터 저장소 인 제 자리에있는 것을 대체 할 것 같습니다 - 정말 멋지지만 정말 필요한 것은 아닙니다. 그러나 나는 이것으로부터 어떤면을 얻을 수 있다고 생각합니다. – Slee

관련 문제