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
文件被封装在内部 (奇怪,我知道)。 这是我如何解决它:
- 我在Finder中find了我的
File.xcdatamodel
文件。 - 用鼠标右键单击并select显示包装内容 。
- 里面是
File.xcdatamodel
另一个副本。 我将其复制到我的桌面。 - 然后我把这个文件拖到Xcode中,然后打开。
终于解脱了。 :)我希望这可以帮助别人。
我们真正的问题是Xcode在创build新版本时无法打开/validation数据模型。 含义:首先有一个.xcdatamodel,然后Editor > Add Model Version... > MyProject 2
(如.xcdatamodel)。 之后,创build了MyPoject.xcdatamodel d ,但无法打开。
经过数小时的调查,我们发现项目文件中的.xcurrentversion文件和XCVersionGroup
丢失或无效。 其中一个原因是xcdatamodel d版本应该在根文件夹中。
快速解决scheme1:
创build一个新的模型版本和:
- 将path设置为根文件夹
- 指定
Group
为以前版本的子目录。
新的.xcdatamodel d现在可以在Xcode上工作,但不能在根文件夹以外的任何地方移动 。
复杂的解决scheme2:
要在子文件夹中使用.xcdatamodel d ,必须按照以下步骤手动修改项目文件:
PS:这是我evcer写的最复杂,最棘手的答案。 对不起 :(
- 在以前版本的同一目录中创build一个新的模型版本(尽pipe它使数据模型无效)。
- 确保您的目标中指定了新的.xcdatamodel d文件。
- 在Finder中打开包内容,并将所有xcdatamodel版本拖放到项目中。
- 在文本编辑器中打开
project.pbxproj
文件。 - 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 */
- 将这些行从
PBXBuildFile
部分移到PBXBuildFile
的开头,并像这样更新它们(重新使用fileId
)。
例:
75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MyProject 2.xcdatamodel"; sourceTree = "<group>"; };
- 现在search
PBXBuildFile
部分中的文件MyPoject.xcdatamodeld
并复制它的fileRef
。
例:
75F319961B9D7FA50030FF46 /* MyProject.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */; }; // fileRef = 75F319931B9D7FA50030FF46
- 最后,在
project.pbxproj
文件的最后,创buildXCVersionGroup
部分,并重复使用xcdatamodel和所有fileId
的fileRef
。
示例(没有//
注释):
/* 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文件。
- 现在从xcode中删除单个xcdatamodel文件的额外引用(在开始时创build的文件)。
对不起,很长的答案…但问题解决:D
这在Xcode 8中仍然是一个问题。
对我来说,简单的解决scheme是将Xxcode左侧的工程文件导航窗格(.xcdatamodeld文件)从其黄色子文件夹拖到应用程序下的顶层(蓝色的图标)。 之后,马上和编辑开了。
我通过拖回到子组重新testing,并再次不会打开编辑器,然后回到顶层,它正确地打开…我不知道为什么发生这种情况,但至less我可以编辑它再次。
希望这有助于某人。
重新启动Xcode通常会处理这个问题。
以下是我如何解决这个问题:
- 在Xcode文件树中,删除了.xcdatamodeld文件。
- 当我打开项目文件夹,文件在那里。 (Xcode只删除了引用。)
- 我已经把它拖回Xcode文件树,选中“如果需要复制项目”。 它没有复制,因为了解该文件已经在项目文件夹下。
问题解决了。
在首先select这种行为发生,但select另一个类,然后返回到dataModel允许编辑我没有CoreData的新项目,然后将coreData模型添加到项目。
只是一个想法,你添加了一个实体,或者你甚至无法访问数据模型视图?
我在Xcode中解决了这个问题:
右键点击你的项目 (不是你的项目文件夹,我的意思是一个蓝色的Xcode图标 !),比select“新文件”,并select正确的文件夹来保存数据模型。
注意:单击项目文件夹本身或其子文件夹之一上的“新build文件”无法正常工作。