2011-12-24 4 views
2

iCloud를 지원하기 위해 로컬 Core Data-driven 앱을 업데이트하고 있습니다. 내가 예상하는 한 가지 도전은 내가 "주식 객체"라고 부르는 것입니다. 즉, 사용자가 99 %의 사용자가 맞춤 설정할 첫 번째 출시 시점에 앱이 제공하는 데이터입니다. 그런 다음 사용자가 새 장치에 앱을 처음 실행하면코어 데이터, iCloud 및 스톡 오브젝트

재고 개체

Item A 
Item B 

[사용자

Tomatoes 
Potatoes 

개체, 나는 기본 동작이 될 것이라고 생각 iCloud 영구 저장소 (Item A, Item B, Tomatoes, Potatoes)의 사용자 정의 된 객체와 병합되는 주식 객체의 재 작성으로 인해 혼란을 낳습니다 y 사용자 경험.

첫 번째 실행시 iCloud 데이터를 동 기적으로 확인하고 존재하는 경우 주식 개체를 생성하지 않을 수도 있습니다. 그러나 사용자는 첫 번째 실행시 오프라인 상태가 될 수 있으며 두 번째 실행에서는 로컬 주식 개체와 iCloud 사용자 지정 개체의 동일한 바람직하지 않은 병합이 발생합니다.

iCloud 병합에 논리를 추가하는 방법이있어 클라우드 (토마토 및 감자)의 사용자 정의 된 객체가 도착하면 빔이 생성되기 전에 로컬 스톡 객체 (항목 A 및 항목 B)를 삭제할 수 있습니까?

감사합니다.

답변

0

나는 이것이 가장 좋은 방법입니다 있는지 확실하지 않습니다, 그러나 이것은 내가 뭘하는지입니다 : 자신의 아이 클라우드 디렉토리가 비어있는 경우

  1. 사용자가 아이 클라우드를 활성화 선출

    , 나는 확인한다.
  2. 그렇다면 문제가 없습니다. 모든 기존 데이터가 클라우드로 이동하도록 iCloud 옵션이 활성화 된 새 로컬 저장소로 데이터베이스를 마이그레이션합니다.
  3. 그렇지 않은 경우 로컬 데이터베이스가 비어 있는지 확인합니다. 그렇다면, 나는 모든 주식을 털어 내고 구름에서 모든 것을 가져 간다. 그렇지 않은 경우 사용자에게 현재 로컬 데이터베이스를 iCloud 데이터베이스와 병합 할 수 없으며 데이터를 삭제 (또는 다시 설치)하도록 요청하여이 문제를 방지합니다.
0

시드 개체를 제공하지 않아도되는 이유는 무엇입니까? UI를 통해 사용자에게 첫 번째 출시시 자신의 개체를 입력하라는 메시지 만 표시하면됩니다. 이전에 앱을 사용해 본 적이 있는지 물어보고 개체를 재생성하기 전에 iCloud와의 동기화가 완료 될 때까지 기다릴 수 있다고 설명합니다.

+0

글쎄, 나는 그 선전과 함께 사용자를 문제시하고 싶지 않습니다. 다른 문제는 특별한 방법으로 처리해야하는 주식 개체로 가득 찬 전체 개체가 있다는 것입니다. Food entity와의 관계에서 주식 FoodType 객체 ("Meat", "Vegetable", "Dessert"등)를 상상해보십시오. 속성이 모두 일치하더라도 서로 다른 장치에서 서로 다른 시간에 만들어지면 코어 데이터가 서로 다른 것으로 간주됩니다. 그래서 병합이 일어 났을 때, 갑자기 두 개의 "고기"FoodTypes가 생기고 어떤 음식은 하나의 물건에 연결되고 어떤 음식은 다른 음식에 연결됩니다. – ed94133

+0

나는 비슷한 경우가있다. 유용했던 시드 객체를 제공했습니다. 대부분 변경되지 않았습니다. 하나의 간단한 아이디어는'validated'라는 부울 속성을 추가하고 거기에서 논리를 취하는 것입니다. 그런 다음 사용자가 알지 못하는 상태에서 백그라운드에서 동등성과 병합 여부를 확인할 수 있습니다. – Mundi