私たちの本当の問題は、新しいバージョンを作成するときに、Xcode がデータ モデルを開いたり検証したりできなかったことです。意味: 最初に 1 つの .xcdatamodel を持ち、次にEditor > Add Model Version... > MyProject 2
(.xcdatamodel として)。その後、 MyPoject.xcdatamodel dが作成されましたが、開くことができませんでした。
何時間も調査した結果、.xcurrentversion ファイルとXCVersionGroup
プロジェクト ファイル内の .xcurrentversion ファイルが見つからないか無効であることがわかりました。理由の 1 つは、xcdatamodel dバージョンがルート フォルダーにある必要があることです。
簡単で速い解決策 1:
新しいモデル バージョンを作成し、次の操作を行います。
- ルート フォルダーへのパスを設定します。
Group
以前のバージョンがあるサブディレクトリになるように指定します。
新しい .xcdatamodel dはXcode で動作するようになりましたが、ルート フォルダー以外の場所に移動することはできません。
複雑な解決策 2:
サブフォルダーに.xcdatamodel を作成するには、次の手順に従ってプロジェクト ファイルを手動で変更する必要があります。
PS: これは、evcer が書いた最も複雑でハックな回答です。申し訳ありません :(
- 以前のバージョンと同じディレクトリに新しいモデル バージョンを作成します (データ モデルが無効になりますが)。
- 新しい .xcdatamodel dファイルがターゲットで指定されていることを確認してください。
- Finder でパッケージ コンテンツを開き、すべての xcdatamodel バージョンをプロジェクトにドラッグ アンド ドロップします。
project.pbxproj
ファイルをテキスト エディタで開きます。
- すべてのデータ モデルの新しいファイルを検索し、それらの
fileId
.
例:
75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel in Sources */ = {isa = PBXBuildFile; fileRef = 75F319981B9D80D50030FF46 /* MyProject 2.xcdatamodel */; };
// fileId = 75F3199D1B9D80D50030FF46 /* The first id at the beginning of the line */
- これらの行を
PBXBuildFile
セクションからセクションの先頭に移動しPBXFileReference
、このように更新します (を再利用しますfileId
)。
例:
75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MyProject 2.xcdatamodel"; sourceTree = "<group>"; };
- セクション
MyPoject.xcdatamodeld
内のファイルを検索し、その.PBXBuildFile
fileRef
例:
75F319961B9D7FA50030FF46 /* MyProject.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */; };
// fileRef = 75F319931B9D7FA50030FF46
- 最後に、
project.pbxproj
ファイルの最後にXCVersionGroup
セクションを作成fileRef
し、xcdatamodel dおよび allから を再利用しますfileId
。
例 (//
コメントなし):
/* Begin XCVersionGroup section */
75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */ = { // fileRed
isa = XCVersionGroup;
children = (
75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */, // fileId
75F319A11B9D80D50030FF46 /* MyProject.xcdatamodel */, // fileId
);
currentVersion = 75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */; // fileId of the current version
name = MyProject.xcdatamodeld;
path = Path/To/MyProject.xcdatamodeld; // set the correct path
sourceTree = "<group>";
versionGroupType = wrapper.xcdatamodel;
};
/* End XCVersionGroup section */
};
rootObject = 7564EB681B4AB1560065394B /* Project object */;
} /* EOF */
- これで、目的のサブフォルダーから Xcode で xcdatamodel dファイルを開くことができるはずです。
- ここで、単一の xcdatamodel ファイルの余分な参照を xcode (最初に作成したもの) から削除します。
長い回答で申し訳ありません...しかし、問題は解決しました:D