2011-03-04 7 views
6

웹 서비스에서 제공하는 데이터를 사용하는 iOS 용 앱을 작성 중입니다. 웹의 연결이 불가능한 경우 데이터의 일부 핵심 집합을 사용자가 사용할 수 있도록 데이터의 로컬 저장 및 지속성을 위해 핵심 데이터를 사용하고 있습니다.웹 데이터가있는 핵심 데이터 패턴을 권장합니까?

이 앱을 제작할 때 핵심 데이터에 대한 많은 게시물을 읽었습니다. 이 작업을 수행하는 방법에 관해서 많은 부분이있는 것처럼 보이지만, 이에 대한 일반적인 원칙/패턴은 더 적습니다.

권장되는 상호 작용 모델에 대해 좋은 참고 자료가 있는지 궁금합니다.

예를 들어 사용자가 앱에서 새 개체를 만들 수 있습니다. 사용자가 새 직원 객체를 만들고, 사용자가 일반적으로 만들고, 업데이트 한 다음 저장합니다. 사용자가 필드를 변경하면이 단계를 서버에 업데이트하는 권장 사항을 보았습니다. 사용자가 마지막에 취소하면 서버에 삭제가 전송됩니다. 동일한 작업에 대한 또 다른 권장 사항은 로컬로 모든 항목을 유지하고 사용자가 저장할 때만 서버에 전체 업데이트를 보내는 것입니다.

이 예제는 제외하고 CRUD 작업을 처리하고 웹 서버와 코어 ​​데이터간에 sync'd하는 방법에 대한 일반적인 권장 사항/패턴이 있는지 궁금합니다.

감사합니다.

답변

0

'트랜잭션'은 기본적으로 여러 개의 작업/변경 사항을 하나의 기본 동작/변경으로 그룹화 한 것입니다. 이렇게하면 부분 저장이 서버에서 일관되지 않은 데이터가 될 수있는 것을 피할 수 있습니다.

궁극적으로 이는 특히 서버 데이터가 여러 클라이언트에서 공유되는 경우 매우 중요한 주제입니다. 가장 간단한 방법은 기본 정책을 결정하는 것입니다. 마지막으로 이길 수 있습니까? 서버 데이터 저장소에있는 객체에 대해 원격으로 잠금을 설정한다는 개념이 있습니까? 두 클라이언트가 같은 객체의 동일한 속성을 편집 할 때 충돌이 어떻게 해결됩니까?

iPhone에서 작업하는 방식에 관해서는 "완료"가 서버에 대한 변경 사항을 지속적으로 유지할 수있는 자연스러운 지점을 제공한다는 점에 동의합니다 (개별 스레드에서).

1

당신이 언급 한 경우에 가장 좋은 방법은 사용자가 새로운 레코드를 추가 할 때까지 로컬에서만 데이터를 저장하는 것입니다. 모든 필드 편집을 서버에 보내면 다소 과도합니다.

iPhone 앱의 일반적인 관용구는 "저장"과 같은 것이 없다는 것입니다. 사용자는 일반적으로 사물이 어떤 의미있는 지점에서 커밋되기를 기대하지만, 저장 자체로서 사용자에게 제공되지는 않습니다.

예를 들어 사용자가 로컬 코어 데이터에 저장되고 서버로 전송되는 일종의 레코드를 편집 할 수있는 UI가 있다고 가정 해보십시오. 사용자가 새 레코드를 만들기 위해 UI를 종료하면 "완료"라는 버튼을 누르게됩니다 (N.B.는 일반적으로 "저장"이라고 함). 그들이 "완료"를 누르면, 핵심 데이터 쓰기를 시작하고 원격 서버로 밀어 넣기를 원할 것입니다. 서버 사용량이 UI를 계속 늘리거나 완료 될 때까지 기다릴 필요는 없습니다. 앱을 계속 사용하도록 허용하는 것이 좋지만 상황은 계속되고 있습니다. 서버로의 업데이트 푸시가 실패한 경우이를 사용자에게 알리거나 적절한 조치를 취할 수 있습니다.

핵심 데이터 및/또는 원격 서버에 대한 기록의 세분성을 계획 할 때 다음과 같은 질문을하는 것이 좋습니다. 응용 프로그램이 다운되거나 전원이 끊겼을 때 어떤 특정 지점에서 앱? 얼마나 많은 데이터 손실이 발생할 수 있습니까? 좋은 앱은 데이터 손실의 위험을 낮추며 어떤 이유로 든 퇴사 한 후에도 이전과 매우 유사한 상태로 다시 시작할 수 있습니다.

+0

+1 코어 데이터와 서버 요소가 서로 얽혀 있지 않고 완전히 별개로 작업 할 수있는 디자인을 선호합니다. 이렇게하면 앱이 오프라인에서 작동 할 수 있습니다. 비행기 모드로 작동합니다. 코어 데이터에 데이터를 저장 한 다음 다시 읽어서 서버로 보냅니다. 그렇게하면 반응 형 UI가 생기고 데이터 손실을 방지 할 수 있습니다. – TechZen

1

머리카락을 찢어 낼 준비가되어 있어야합니다. 나는 이것에 대해 연구 해왔고 핵심 데이터 샘플은 매우 간단하다는 문제가있다. 복잡한 모델로 이동할 때 NSFetchedResultsController와 그 대리자를 사용하려고하면 여러 컨텍스트를 사용하여 모든 종류의 문제가 발생합니다.

백그라운드 "블록"에서 웹 서비스의 데이터를 채우는 데 하나를 사용하고, 테이블 뷰를 사용하려면 두 번째를 사용합니다. 마스터 목록과 상세보기에 대해 tableview를 사용하게 될 가능성이 높습니다.

서버에서 데이터를주고받는 동안 앱의 응답 속도를 높이려면 Cocoa의 블록을 사용하십시오.

관련 문제