2011-10-20 3 views
4

으로는 (경량 마이그레이션이 지원됩니다) 매핑 모델을 사용하여 Apple documentation아이 클라우드, 코어 데이터 마이그레이션 및 모델 매핑

스키마 마이그레이션이 지원되지 않습니다 말했다.

iCloud 기능 및 매핑 모델 마이그레이션을 처리해야하는 경우에 대비하여 옵션에 대해 궁금한 점이있었습니다 ... 향후 내 Core Data 모델을 변경하여 응용 프로그램에 기능을 추가해야 할 필요가 있음을 알고 있습니다. (뿐만 아니라 가벼운 방식으로). 이제는 어떤 새로운 엔티티가 필요하고 이전 모델 엔티티와 어떤 관계가 설정 될지는 말할 수 없다는 것입니다.

나는 그런 순서에 대해 생각했다 :

1 - 내 핵심 데이터 모델의 매핑 마이그레이션을하는 내 응용 프로그램을 시작

2 - 그것은

아이 클라우드와 동기화시키는 iCloud에 새 모델에 적합한 트랜잭션 로그 파일이 포함 된 경우이 작업이 가능합니다. 이전 트랜잭션 로그 파일 (이전 모델에 적용되었음을 의미)의 경우 실패합니다.

내가 일을 생각 것을 방지하려면

1 -이 아이 클라우드

2와 동기화시키는 내 응용 프로그램 시작 - 내 핵심 데이터의 매핑 마이그레이션을 수행을 모델

3 - 이전 iCloud 데이터 제거하기 새 부품으로 업데이트하기

iCloud에 업데이트 된 트랜잭션이 이미 포함되어 있으면 작동하지 않습니다 이온 로그 파일 (새로운 모델에 적용된 수단).

iCloud의 트랜잭션 로그가 현재 코어 데이터 모델과 호환되는지 확인하는 방법이 필요합니다. 이것을 할 수있는 방법이 있습니까?

감사합니다.

+0

iCloud 키 - 값을 사용하여 영구 저장소 코디네이터를 만들거나 모델 매핑을 수행하기 전에 확인할 수있는 모델 버전을 저장하는 것이 좋습니다. iCloud 및 Core Data의 사용이 여전히 안정적이지 않다는 Apple iCloud 포럼의 iPhoneRecipes 예제를 지금 받고 싶습니다. 동기화가 성공하지 못하는 경우가 있으며 때로는 iCloud에 연결하지 못할 수도 있습니다. 나는 Apple의 업데이트 전에 iCloud를 Core Data와 함께 사용하지 않을 것이라고 생각합니다. – dMathieuD

답변

2

프로덕션 응용 프로그램에서 iCloud와 함께 코어 데이터를 사용하지 않는 것이 좋습니다.

충분히 안정적이지 않습니다. 앱이 iCloud 설정에서 사용/사용 중지되었는지 확인하는 간단한 방법은 없습니다. 또한 사용자가 iCloud 지원을 사용 가능하게 한 후에 iCloud 지원을 끈 경우 발생할 수있는 문제점은 말할 것도 없습니다.

마이그레이션도 다른 문제입니다. 간단한 마이그레이션은 꽤 잘 작동합니다. 그러나 매핑 모델 이전 작업을 수행하려면 기존 iCloud "ubiquity 폴더"에서 콘텐츠를 제거/제거하고 새 이름으로 새 콘텐츠를 만들고 NSPersistentStoreUnbiquitousContentURLKey와 관련된 값을 변경해야합니다. 그리고 모든 클라이언트가 동일한 작업을 수행하도록해야합니다. 그것의 복잡하지만 행할. 그것의 가치가 있는지 확실하지 않은 ...

버전 호환성 문제에 대해서는 아직 시도하지 않았지만 버전이 일치하는지 ManagedObjectModel의 "compatibleWithStoreMetadata"메소드를 통해 iCloud 트랜잭션 로그에서 스토어 메타 데이터를 얻는 것이 좋습니다.

// Get current model 
NSManagedObjectModel *myModel = [self managedObjectModel]; 

// Check compatibility 
BOOL isCompatible = [myModel isConfiguration:nil compatibleWithStoreMetadata: metadataFromTransactionLogEntry]; 
관련 문제