XCode不能编辑CoreData模型

在使用CoreData Model添加到我现有的项目之后

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

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

不是说这对XCodes识别文件types的能力有任何影响,但是我也在构build阶段引用了CoreData.framework,并在AppDelegate中包含了必要的Core Data属性。

奇怪的是我已经打开Finder中的.xcdatamodeld包来暴露内部的.xcdatamodel(注意没有尾随“d”)。 双击该文件将按预期打开带有核心数据模型编辑器的XCode。

更奇怪的是,我创build了一个新的投影并点击了“使用核心数据”checkbox。 这样做使我可以通过在Project Navigator中select.xcdatamodeld引用来编辑数据模型。 因此,我的机器和XCode能够并configuration为编辑CoreData文件。

就好像XCode无法使用核心数据,除非原始项目是使用“使用核心数据”checkbox创build的。

有没有人遇到过这个问题,你能解决这个问题吗?

谢谢!

原来我试图将数据模型添加到一个组,该组引用了一个特定的文件夹来存储它的孩子。 但是该文件夹不存在。 这会导致XCode将数据模型放置在项目根目录中,但同时将其作为驻留在项目根目录之上的2个目录进行引用。 甚至更奇怪的是,XCode没有列出文件丢失,通过显示红色。 无论哪种方式,XCode在Project Navigator中单击时忽略了该文件,因为它并不存在它认为它所做的事情。 故事的道德是:检查您的文件path和configuration组path。

我今天遇到了这个问题,问题是我的.xcdatamodel文件被封装在内部 (奇怪,我知道)。 这是我如何解决它:

  1. 我在Finder中find了我的File.xcdatamodel文件。
  2. 用鼠标右键单击并select显示包装内容
  3. 里面是File.xcdatamodel另一个副本。 我将其复制到我的桌面。
  4. 然后我把这个文件拖到Xcode中,然后打开。

终于解脱了。 :)我希望这可以帮助别人。

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

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

快速解决scheme1:

创build一个新的模型版本和:

  1. 将path设置为根文件夹
  2. 指定Group为以前版本的子目录。

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

复杂的解决scheme2:

要在子文件夹中使用.xcdatamodel d ,必须按照以下步骤手动修改项目文件:

PS:这是我evcer写的最复杂,最棘手的答案。 对不起 :(

  1. 在以前版本的同一目录中创build一个新的模型版本(尽pipe它使数据模型无效)。
  2. 确保您的目标中指定了新的.xcdatamodel d文件。
  3. 在Finder中打开包内容,并将所有xcdatamodel版本拖放到项目中。
  4. 在文本编辑器中打开project.pbxproj文件。
  5. search所有数据模型的新文件并复制它们的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部分移到PBXBuildFile的开头,并像这样更新它们(重新使用fileId )。

例:

 75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MyProject 2.xcdatamodel"; sourceTree = "<group>"; }; 
  1. 现在searchPBXBuildFile部分中的文件MyPoject.xcdatamodeld并复制它的fileRef

例:

 75F319961B9D7FA50030FF46 /* MyProject.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */; }; // fileRef = 75F319931B9D7FA50030FF46 
  1. 最后,在project.pbxproj文件的最后,创buildXCVersionGroup部分,并重复使用xcdatamodel和所有fileIdfileRef

示例(没有//注释):

 /* 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文件的额外引用(在开始时创build的文件)。

对不起,很长的答案…但问题解决:D

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

对我来说,简单的解决scheme是将Xxcode左侧的工程文件导航窗格(.xcdatamodeld文件)从其黄色子文件夹拖到应用程序下的顶层(蓝色的图标)。 之后,马上和编辑开了。

我通过拖回到子组重新testing,并再次不会打开编辑器,然后回到顶层,它正确地打开…我不知道为什么发生这种情况,但至less我可以编辑它再次。

希望这有助于某人。

重新启动Xcode通常会处理这个问题。

以下是我如何解决这个问题:

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

问题解决了。

在首先select这种行为发生,但select另一个类,然后返回到dataModel允许编辑我没有CoreData的新项目,然后将coreData模型添加到项目。

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

我在Xcode中解决了这个问题:

右键点击你的项目 (不是你的项目文件夹,我的意思是一个蓝色的Xcode图标 !),比select“新文件”,并select正确的文件夹来保存数据模型。

注意:单击项目文件夹本身或其子文件夹之一上的“新build文件”无法正常工作。