2012-10-31 2 views
0

내 모델이 각각 어떤 모델을 기반으로하고 있는지보고 싶습니다. Xcode에서이 작업을 수행 할 수있는 곳을 찾을 수 없었습니다. 새 모델 버전을 만들고이를 기반으로하는 모델을 선택하면 ("편집기/모델 버전 추가 ..."를 사용하고 "모델 기반"드롭 다운 메뉴를 사용하여 이전 모델을 선택하면) 선택 사항을 보거나 변경하십시오.코어 데이터 모델이 표시되거나 변경되는 것을 기반으로 모델을 모델링 할 수 있습니까?

.xcdatamodeld 및 .xcdatamodel 파일은 패키지이므로 "/ 패키지 내용보기"를 마우스 오른쪽 버튼으로 클릭하여 검사 할 수 있습니다. .xcdatamodel 파일은 "내용"이라는 이름의 XML 파일이 포함되어 있지만 이전 모델의 버전이없는 것 : 나는 또한 프로젝트의 .xcodeproj 파일에 보였다 (도 패키지) 발견

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<model name="" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1811" systemVersion="11G63" minimumToolsVersion="Automatic" macOSVersion="Automatic" iOSVersion="Automatic"> 
    <entity name="Settings" syncable="YES"> 
     <attribute name="filterOrderArray" optional="YES" attributeType="Transformable" syncable="YES"/> 
    </entity> 
    <elements> 
     <element name="Settings" positionX="160" positionY="192" width="128" height="60"/> 
    </elements> 
</model> 

project.pbxproj 파일이 포함 :

다시
/* Begin XCVersionGroup section */ 
     CFE0A83E164F6CF40000C765 /* Filters.xcdatamodeld */ = { 
      isa = XCVersionGroup; 
      children = (
       CFE0A841164F6D100000C765 /* Filters 1.3.xcdatamodel */, 
       CFE0A83F164F6CF40000C765 /* Filters 1.2.xcdatamodel */, 
      ); 
      currentVersion = CFE0A841164F6D100000C765 /* Filters 1.3.xcdatamodel  */; 
      path = Filters.xcdatamodeld; 
      sourceTree = "<group>"; 
      versionGroupType = wrapper.xcdatamodel; 
     }; 
/* End XCVersionGroup section */ 

, 아니 이전 버전 정보, 그는 그 진수 문자열 만 보인다 엑스 코드/프로젝트 탐색에서 .xcdatamodel 파일의 순서에 의해 결정되는 않는 "children"매개 변수.

는 또한 모델 버전의 이름을 변경하는 것은 (그것이 어딘가에 저장되어 나타내며 버전의 단지 순서 없음) 당신이 그렇게 할 경우 initWithContentsOfURL이 전무 모델을 반환 이전 버전의 연결이 끊어 발견 :

NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; 

그래서 내가 말할 수있는 한, 모델이 만들어지면 어떤 모델을 보거나 변경할 수 없습니다. 모델 계층 구조를 정리해야하는 경우 효과적으로 다시 시작하고 필요한 각 버전을 다시 만들어야합니다 (적어도 이전 모델에서 엔티티를 복사하여 처음부터 완전히 시작하지는 않음).

답변

0

모델의 새 버전을 추가하면 모델을 변경할 수 있습니다. 이전 버전은 핵심 데이터가 이전 버전에서 생성 된 영구 저장소를 자동으로 마이그레이션 할 수 있도록합니다. 이전 버전을 편집하면이 마이그레이션이 중단됩니다. 그러면 연결되지 않은 이름 바꾸기에 관해 이야기하기 시작합니다. 버전이 기반으로하는 모델 변경에 대해 이야기하는 것은 이치에 맞지 않습니다. 동일한 모델의 새로운 버전입니다.

다중 버전 모델을 사용하면 프로젝트 브라우저에서 모델별로 공개 삼각형을 확장하여 IIRC 버전을 탐색 할 수 있습니다.

+0

고마워요,하지만이 모든 것을 이해합니다. 나는 오랜 시간 동안 내 모델의 새 버전을 만들었습니다. 한 번에 50 가지 버전이있었습니다. 대부분은 다양한 수준의 테스트를 거쳤으며 어떤 모델이 이전 버전을 기반으로했는지 기억하지 못했습니다. 불필요한 버전을 모두 지우고 더 나은 이름으로 바꿔야했습니다. 문제는 모든 모델을 보는 방법이 아니라 모델의 기반 버전과 그 정보가 저장되는 위치를 알려주는 것입니다. – Symmetric

+1

이전 버전을 사용하고있는 앱이 있습니까? 그렇지 않은 경우 다른 버전을 삭제하면 정리할 수 있습니다. 각 버전은 완전한 구조이며 마이그레이션 이외의 다른 버전의 존재에 의존하지 않습니다. – jrturton

+1

와우, 나는 각 버전이 완전한 구조라는 것에 대해 당신과 의견이 맞지 않았지만 "Add Model Version ..."이 무엇인지에 대해 오해 할 수도 있습니다. 현재 선택된 버전이 새 버전으로 복사되고 나중에 모델 기반 모델이 .mom 파일을 컴파일 할 때 또는 마이그레이션 중에 사용 된 것으로 생각했습니다. 방금 테스트를 해봤는데 실제로 복사 된 "모델 기반"버전이고 현재 선택된 모델은 목록에 새 버전을 배치하는 데 사용됩니다. 그게 많이 설명해! – Symmetric

관련 문제