2013-03-18 4 views
0

런타임 중에 테이블/열을 데이터베이스에 추가하려고합니다. 현재 핵심 데이터를 사용하고 있습니다. XCode (새 데이터 모델 버전 추가)에서 그렇게 할 가능성이 있음을 알고 있지만 웹 서비스에서 데이터베이스 스키마를 받기 때문에 확실히 사용할 수 없습니다.iOS : 런타임 중 DDL 명령

코어 데이터를 사용할 때 런타임 중에 ddl 명령을 실행할 가능성이 있습니까? 아니면 sqlite (또는 래퍼/ormapper)를 직접 사용하여 가능합니까? wrapper/ormapper를 사용하는 것이 더 나은 경우에는이 경우 사용해야 할 제안을 알려주십시오.

워크 플로우가 있어야한다 :

  1. 시작 응용 프로그램
  2. 체크하면 데이터베이스가 최신 스키마의 새 버전은 웹 서비스에서 사용할 수있는 경우
  3. 에 달려있다 DDL은
  4. 앱 워크 플로우를 계속 명령 할

추 신 : Xcode로 스키마를 수정하는 대체 방법을 설명하는 답변을 제공해주십시오!

+0

코어 데이터가 사용하는 데이터 모델 또는 다른 것을 수정 하시겠습니까? 핵심 데이터 이외의 것을 의미하는 것처럼 보이는 "데이터베이스"라고 말하지만 명확하지 않습니다. –

+0

죄송합니다, 예 코어 데이터 모델을 수정하고 싶습니다. – user2181824

답변

1

런타임에 핵심 데이터 모델을 수정할 수 있습니까? 네 ...하지만, 아마 당신이 원하는대로 작동하지 않을 것입니다.

코어 데이터의 API를 사용하면 런타임에 데이터 모델의 모든 세부 사항을 구성하거나 수정할 수 있습니다. Xcode의 모델 편집기는 편리하지만 원하는 경우 코드를 건너 뛰고 모든 것을 수행 할 수 있습니다. 예를 들어 NSEntityDescriptionproperties 속성 (속성과 관계를 모두 포함)은 쓰기 가능합니다. 새로운 NSAttributeDescription을 생성하고이를 포함 할 엔티티의 속성을 업데이트 할 수 있습니다. 방금 엔티티에 새로운 속성을 추가했습니다. 마찬가지로 NSManagedObjectModelentities 속성을 쓸 수 있으므로 새 NSEntityDescription을 만들고이를 모델에 추가 할 수 있습니다. 이것은 런타임에 생성 된 새로운 엔티티를 제공합니다.

그러나, 그것은 큰 하나는 : 데이터 저장소로드이 전에 만 할 수 있습니다. 영구 저장소를로드하면 모델을 변경하면 예외가 발생합니다. 코어 데이터는 영구 저장소를로드 할 때 모델 파일을 저장소 파일에서 사용되는 모델과 비교합니다. 그들은 과 일치해야하며 상점을로드 한 후에는이 사실을 변경할 수 없습니다. 상점을로드하면 모델이 수정됩니다.

영구 저장소를로드하기 전에 모델을 수정하더라도 모델의 현재 버전과 일치하는 영구 저장소 만로드 할 수 있습니다. 즉, 영구 저장소를 마이그레이션하는 코드도 작성하지 않으면 새로운 모델. 그것이 얼마나 힘든지는 변화의 본질에 달려 있습니다. 그런 다음 최소한 이전에 저장 한 데이터를로드하기 전에 변경해야하며 모델 마이그레이션을 수행하여 새 모델을 사용하도록 영구 저장소를 업데이트해야합니다.

코어 데이터의 경우 모델 (스키마)과 데이터는 별도로 저장되며 저장소가로드 될 때 일치됩니다. 그것은 SQLite가 내부적으로 작동하는 방식이 아니지만 Core Data가 시행하는 접근 방식입니다.