12

を使用して既存のプロジェクトに CoreData モデルを追加した後

File > New > File... > Core Data > Data Model

モデルを編集できません。プロジェクトには .xcdatamodeld パッケージ参照が含まれるようになりましたが、Project Navigator でこれをクリックすると、フォルダーまたはグループをクリックするのと同じ効果があり、現在のエディターは変更されません。また、参照を右クリックして [Open As >] を選択すると、潜在的なエディターが一覧表示されません。さらに、ファイル インスペクター パネルを開くと、「アイデンティティ」、「ターゲット メンバーシップ」、および「テキスト設定」の設定のみが表示され、「コア データ モデル」または「バージョン化されたコア データ モデル」の設定は表示されません。

これが XCodes のファイル タイプ認識機能に影響するわけではありませんが、ビルド フェーズで CoreData.framework も参照し、必要な Core Data プロパティを AppDelegate に含めました。

奇妙なのは、Finder で .xcdatamodeld パッケージを開いて、内部の .xcdatamodel を公開したことです (末尾の 'd' がないことに注意してください)。そのファイルをダブルクリックすると、想定どおり Core Data Model Editor で XCode が開きます。

さらに奇妙なことに、私は新しいプロジェクトを作成し、[コア データを使用] チェック ボックスをクリックしました。これにより、Project Navigator で .xcdatamodeld 参照を選択してデータ モデルを編集できるようになりました。したがって、私のマシンと XCode は CoreData ファイルを編集できるように構成されています。

元のプロジェクトが「コアデータを使用」チェックボックスで作成されていない限り、XCode はコアデータを使用できないようです。

この問題を経験した人はいますか?修正できましたか?また、どのように修正できましたか?

ありがとう!

4

8 に答える 8

31

子を格納する特定のフォルダーを参照するグループにデータモデルを追加しようとしていたことがわかりました。ただし、そのフォルダーは存在しませんでした。これにより、XCode はデータ モデルをプロジェクト ルートに配置しますが、同時に、プロジェクト ルートの 2 つ上のディレクトリに存在するものとして参照します。さらに奇妙なのは、XCode がファイルを赤で表示して欠落としてリストしなかったことです。どちらにしても、Project Navigator でファイルをクリックすると、XCode はファイルを無視しました。話の教訓は、ファイル パスと構成済みのグループ パスを確認することです。

于 2012-12-05T22:56:17.327 に答える
30

今日、この問題に遭遇しました。問題は、私のファイルがそれ自体の中.xcdatamodelにパッケージ化されていたことです (奇妙なことです)。これが私がそれを修正した方法です:

  1. File.xcdatamodelFinder でファイルを見つけました。
  2. 右クリックして、[パッケージの内容を表示] を選択します。
  3. 中には の別のコピーがありFile.xcdatamodelました。それをデスクトップにコピーしました。
  4. 次に、そのファイルを Xcode にドラッグすると、ファイルが開きました。

なんという安堵。:)これが他の誰かに役立つことを願っています。

于 2014-09-03T06:53:26.653 に答える
4

私たちの本当の問題は、新しいバージョンを作成するときに、Xcode がデータ モデルを開いたり検証したりできなかったことです。意味: 最初に 1 つの .xcdatamodel を持ち、次にEditor > Add Model Version... > MyProject 2(.xcdatamodel として)。その後、 MyPoject.xcdatamodel dが作成されましたが、開くことができませんでした。

何時間も調査した結果、.xcurrentversion ファイルとXCVersionGroupプロジェクト ファイル内の .xcurrentversion ファイルが見つからないか無効であることがわかりました。理由の 1 つは、xcdatamodel dバージョンがルート フォルダーにある必要があることです。

簡単で速い解決策 1:

新しいモデル バージョンを作成し、次の操作を行います。

  1. ルート フォルダーへのパスを設定します。
  2. Group以前のバージョンがあるサブディレクトリになるように指定します。

新しい .xcdatamodel dXcode で動作するようになりましたが、ルート フォルダー以外の場所に移動することはできません

複雑な解決策 2:

サブフォルダーに.xcdatamodel を作成するには、次の手順に従ってプロジェクト ファイルを手動で変更する必要があります。

PS: これは、evcer が書いた最も複雑でハックな回答です。申し訳ありません :(

  1. 以前のバージョンと同じディレクトリに新しいモデル バージョンを作成します (データ モデルが無効になりますが)。
  2. 新しい .xcdatamodel dファイルがターゲットで指定されていることを確認してください。
  3. Finder でパッケージ コンテンツを開き、すべての xcdatamodel バージョンをプロジェクトにドラッグ アンド ドロップします。
  4. project.pbxprojファイルをテキスト エディタで開きます。
  5. すべてのデータ モデルの新しいファイルを検索し、それらの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 */
  1. これらの行をPBXBuildFileセクションからセクションの先頭に移動しPBXFileReference、このように更新します (を再利用しますfileId)。

例:

75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MyProject 2.xcdatamodel"; sourceTree = "<group>"; };
  1. セクションMyPoject.xcdatamodeld内のファイルを検索し、その.PBXBuildFilefileRef

例:

75F319961B9D7FA50030FF46 /* MyProject.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */; };
// fileRef = 75F319931B9D7FA50030FF46
  1. 最後に、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 */
  1. これで、目的のサブフォルダーから Xcode で xcdatamodel dファイルを開くことができるはずです。
  2. ここで、単一の xcdatamodel ファイルの余分な参照を xcode (最初に作成したもの) から削除します。

長い回答で申し訳ありません...しかし、問題は解決しました:D

于 2015-09-07T09:48:51.133 に答える
2

これは Xcode 8 でもまだ問題です。

私にとって、簡単な解決策は、(プロジェクトファイルナビゲーターペイン内-Xcodeの左側).xcdatamodeldファイルを(黄色の)サブグループフォルダーからアプリの下の最上位レベル(青色のもの)にドラッグすることでしたアイコン)。その後、すぐにエディターで開きました。

サブグループにドラッグして再テストしましたが、再びエディターで開かれず、トップレベルに戻り、正しく開きました...なぜこれが起こっているのかわかりませんが、少なくとも編集できますまた。

これが誰かに役立つことを願っています。

于 2016-12-07T23:47:08.110 に答える
1

これが私が問題を解決した方法です:

  1. Xcode ファイル ツリーで、.xcdatamodeld ファイルを削除しました。
  2. プロジェクトフォルダーを開くと、ファイルがそこにありました。(Xcode は参照のみを削除しました。)
  3. Xcodeファイルツリーにドラッグして戻し、「必要に応じてアイテムをコピーする」をチェックしました。ファイルが既にプロジェクト フォルダーの下にあることがわかったため、コピーを作成しませんでした。

問題が解決しました。

于 2015-04-13T11:47:56.393 に答える
1

通常、Xcode を再起動すると、この問題が解決されます。

于 2012-12-05T16:45:36.363 に答える
0

Xcodeで次のように解決しました:

プロジェクト (プロジェクト フォルダーではなく、青い Xcode アイコンが付いているプロジェクトを意味します) を右クリックし、 [新しいファイル] を選択して、データ モデルを保存する適切なフォルダーを選択します。

注: プロジェクト フォルダー自体またはそのサブフォルダーの 1 つで [新しいファイル] をクリックしても、何らかの理由で機能しませんでした..

于 2016-01-20T12:01:23.957 に答える
0

最初の選択でこの動作が発生しますが、別のクラスを選択してから dataModel に戻ると、CoreData を使用せずに新しいプロジェクトを編集してから、coreData モデルをプロジェクトに追加できます。

エンティティを追加しましたか、それともデータモデル ビューにアクセスできませんか?

于 2012-12-05T16:58:54.120 に答える