2017-02-07 1 views
1

1 년 반 전에 다시 돌아올 앱을 만들었습니다. 스위프트 이빨을 자르는 프로젝트 였고 그 이후로 언어와 스 위프트 능력 모두에서 분명히 많은 변화가있었습니다.사용자 업그레이드를위한 CoreData 크래시 방지

어제는 처음으로 단일 CoreData 모델을 업데이트하여 선택적 문자열 속성을 추가했습니다. 필자는 파일 생성 비트를 수행했으며 검사기 열에서 새 데이터 모델이 적절히 선택되었는지 확인했습니다.

내 시뮬레이터 및 테스트 장치에 새 버전을 설치하기 위해 이전 버전의 앱을 삭제해야합니다. 그렇지 않으면 충돌이 발생합니다. 나는 이것이 개발 환경 프로세스의 일부라고 가정합니다. 사용자가 App Store에서 간단한 업데이트를 수행 할 때 삭제하고 다시 설치할 필요가 없도록하려면 어떻게해야합니까? 나는 Xcode/CoreData/Apple이 이것을 일부 내부 스크립트 또는 사용자가 볼 수없는 프로세스와 함께 처리한다고 가정합니다. "그냥 작동합니다." 그러나 사용자를 위해 v1에서 v1.1로 원활하게 전환하기 위해 필요한 추가 사항이 있는지 이해하기 위해 여기에 게시하고 싶습니다.

내가 언급 한 것처럼 선택적 문자열 열이 전부였습니다. 새로운 필드가 nil 인 기존의 모든 사용자 데이터가 새 스키마로 마이그레이션된다고 가정합니다.

모든 의견은 매우 환영 할 만합니다. 감사!

+0

당신은 당신이 새로운 하나 이전 버전에서 마이그레이션하고 싶은 방법으로 할 몇 가지 선택이있다, 나는 조금 여기를 읽는 게 좋을 것 :이이 작업을 수행하는 방법에 대한 코드입니다 : https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweightMigration.html –

+0

감사합니다. –

+1

해당 오류는 개발 프로세스의 일부가 아닙니다. 출시 전에 수정해야합니다. –

답변

2

업그레이드 할 때 시뮬레이터에서 앱이 충돌하는 경우 사용자에게도 충돌이 발생합니다.

  1. 당신은 어떤 방법으로 데이터 모델의 원본 버전을 변경하지 마십시오 확인하십시오

    당신은 당신이 다음 단계를 수행 할 필요가,이 문제를 방지하려면.
  2. Xcode에서 xcdatamodel 파일을 선택한 다음 메뉴에서 편집기> 모델 추가 ...를 선택하십시오.
  3. Xcode는 현재 모델을 기반으로 새 버전 이름을 제안합니다. 새 버전 이름을 기록한 다음 마침을 클릭하십시오.
  4. xcdatamodel 파일을 다시 선택하고 파일 속성에서 모델 버전 아래로 이동하여 새 버전 이름을 선택하여 현재 버전으로 만듭니다.
  5. Project Navigator에서 xcdatamodel의 새 버전을 선택하십시오. 귀하의 속성을 추가하십시오.

이 순서로이 단계를 수행하는 것이 중요합니다. 새 모델을 만들기 전에 속성을 추가하거나 현재 버전으로 만들면 충돌이 발생합니다.

편집 :이 기능은 간단한 마이그레이션을 사용하도록 설정 한 경우에만 작동합니다.

let options = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true] 

do { 
    //coordinator is an NSPersistentStoreCoordinator 
    try coordinator!.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: options 
} catch var error as NSError { 

    // handle error however you want here...    
    abort() 
} 
+0

감사합니다. 또한 NSManagedObject 하위 클래스를 생성해야합니까? 여기서 빠져 나왔어? –

+0

이것은 완벽하게 작동했습니다. 나중에 이것을 찾는 사용자를위한 편집 추가하기 –

+0

당신의 도움을 위해 다시 한번 마이크 마이크! –

관련 문제