12

将 CoreData 模型添加到我现有的项目后,使用

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

我无法编辑模型。该项目现在包含一个 .xcdatamodeld 包引用,但在 Project Navigator 中单击它与单击文件夹或组具有相同的效果,当前编辑器不会更改。同样右键单击参考并选择“打开为>”不列出任何潜在的编辑器。此外,打开文件检查器面板仅列出“身份”“目标成员”和“文本设置”的设置,它不会列出“核心数据模型”或“版本化核心数据模型”的设置

并不是说这会对 XCodes 识别文件类型的能力产生任何影响,但我还在构建阶段引用了 CoreData.framework,并在 AppDelegate 中包含了必要的 Core Data 属性。

奇怪的是,我在 Finder 中打开了 .xcdatamodeld 包以公开内部 .xcdatamodel(注意没有尾随的 'd')。双击该文件将按预期使用 Core Data Model Editor 打开 XCode。

更奇怪的是,我创建了一个新的投影并单击了“使用核心数据”复选框。这样做允许我通过在 Project Navigator 中选择 .xcdatamodeld 引用来编辑数据模型。因此,我的机器和 XCode 能够并配置为编辑 CoreData 文件。

就好像 XCode 无法使用 Core Data 一样,除非原始项目是使用“使用 Core Data”复选框创建的。

有没有人遇到过这个问题,您是否能够解决它,以及如何解决?

谢谢!

4

8 回答 8

31

结果我试图将数据模型添加到一个组中,该组引用了一个特定的文件夹来存储它的孩子。但是该文件夹不存在。这导致 XCode 将数据模型放置在项目根目录中,但同时将其引用为位于项目根目录上方的 2 个目录。更奇怪的是,XCode 并没有通过将文件显示为红色来将其列为丢失。无论哪种方式,XCode 在 Project Navigator 中单击时都会忽略该文件,因为它并不真正存在于它认为它存在的位置。故事的寓意是:检查您的文件路径和配置的组路径。

于 2012-12-05T22:56:17.327 回答
30

我今天遇到了这个问题,问题是我的.xcdatamodel文件是自己打包的(奇怪,我知道)。这是我修复它的方法:

  1. File.xcdatamodel在 Finder 中找到了我的文件。
  2. 右键单击并选择Show Package Contents
  3. 里面是另一个副本File.xcdatamodel。我把它复制到我的桌面。
  4. 然后我将该文件拖到 Xcode 中并打开它。

终于解脱了。:) 我希望这对其他人有所帮助。

于 2014-09-03T06:53:26.653 回答
4

我们真正的问题是 Xcode 在创建新版本时无法打开/验证数据模型。含义:拥有第一个 .xcdatamodel,然后Editor > Add Model Version... > MyProject 2(作为 .xcdatamodel)。之后,创建了 MyPoject.xcdatamodel d但无法打开。

经过数小时的调查,我们发现 .xcurrentversion 文件和XCVersionGroup项目文件中的 .xcurrentversion 文件丢失或无效。原因之一是 xcdatamodel d版本应该在根文件夹中。

简单快速的解决方案1:

创建一个新的模型版本并:

  1. 设置根文件夹的路径
  2. 将 指定为Group先前版本所在的子目录。

新的 .xcdatamodel d现在可以在 Xcode 上工作,但不能移动到根文件夹以外的任何地方

复杂的解决方案2:

要在子文件夹中有一个工作的 .xcdatamodel d,您必须按照以下步骤手动修改项目文件:

PS:这是我曾经写过的最复杂和最老套的答案。对不起 :(

  1. 在先前版本的同一目录中创建一个新的模型版本(即使它使数据模型无效)。
  2. 确保在您的目标中指定了新的 .xcdatamodel d文件。
  3. 在 Finder 中打开 Package Content 并将所有 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部分中的文件PBXBuildFile并复制其fileRef.

例子:

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. 现在从 xcode 中删除单个 xcdatamodel 文件的额外引用(在开始时创建的那些)。

对不起,答案很长......但问题解决了:D

于 2015-09-07T09:48:51.133 回答
2

这在 Xcode 8 中仍然是一个问题。

对我来说,简单的解决方案是将我的 .xcdatamodeld 文件从其(黄色)子组文件夹(在项目文件导航器窗格内 - Xcode 的左侧)拖动到应用程序下的最顶层(蓝色的那个)图标)。之后,它立即打开了编辑器。

我通过将它拖回子组重新测试,它再次无法在编辑器中打开,然后回到顶层并正确打开......我不知道为什么会发生这种情况,但至少我可以编辑它再次。

希望这可以帮助某人。

于 2016-12-07T23:47:08.110 回答
1

重启 Xcode 通常会解决这个问题。

于 2012-12-05T16:45:36.363 回答
1

这是我解决问题的方法:

  1. 在 Xcode 文件树中,删除了 .xcdatamodeld 文件。
  2. 当我打开项目文件夹时,文件就在那里。(Xcode 只删除了引用。)
  3. 我已将其拖回 Xcode 文件树,选中“如果需要则复制项目”。它没有复制,因为知道该文件已经在项目文件夹下。

问题解决了。

于 2015-04-13T11:47:56.393 回答
0

在第一次选择时会发生这种行为,但是选择另一个类然后返回 dataModel 允许我在没有 CoreData 的新项目上进行编辑,然后将 coreData 模型添加到项目中。

只是一个想法,您是否添加了实体,或者您甚至无法访问数据模型视图?

于 2012-12-05T16:58:54.120 回答
0

我在 Xcode 中这样解决它:

右键单击您的项目(不是您的项目文件夹,我的意思是带有蓝色 Xcode 图标的那个!),然后选择“新建文件”并选择正确的文件夹来保存数据模型。

注意:在项目文件夹本身或其子文件夹之一上单击“新建文件”无法以某种方式工作。

于 2016-01-20T12:01:23.957 回答