使用
将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无法使用核心数据,除非原始项目是使用“使用核心数据”复选框创建的。
有没有人遇到过这个问题,你能解决它,以及如何解决?
谢谢!
答案 0 :(得分:31)
原来我试图将数据模型添加到一个组中,该组引用了一个特定的文件夹来存储它的子项。但该文件夹不存在。这会导致XCode将数据模型放在项目根目录中,但同时将其引用为驻留在项目根目录上的2个目录。甚至更奇怪的是,XCode没有将文件显示为缺失,而是将其显示为红色。无论哪种方式,XCode在Project Navigator中单击时都会忽略该文件,因为它确实不存在于它认为的位置。故事的道德是:检查文件路径和配置的组路径。
答案 1 :(得分:29)
我今天遇到了这个问题,问题是我的.xcdatamodel
文件在内部打包了(奇怪,我知道)。以下是我修复它的方法:
File.xcdatamodel
文件。File.xcdatamodel
的另一个副本。我将其复制到我的桌面。真是一种解脱。 :)我希望这可以帮助别人。
答案 2 :(得分:4)
我们真正的问题是Xcode在创建新版本时无法打开/验证数据模型。
含义:首先使用.xcdatamodel,然后使用Editor > Add Model Version... > MyProject 2
(作为.xcdatamodel)。
之后,MyPoject.xcdatamodel d 已创建,但无法打开。
经过几个小时的调查,我们发现.xcurrentversion文件和项目文件中的XCVersionGroup
丢失或无效。
其中一个原因是xcdatamodel d 版本应该在根文件夹中。
创建新的模型版本并:
Group
为以前版本所在的子目录。新的.xcdatamodel d 现在可以在Xcode上运行,但不能移动到根文件夹以外的任何地方。
要在子文件夹中使用.xcdatamodel d ,必须手动修改项目文件,然后执行以下步骤:
PS:这是我演奏者写的最复杂,最苛刻的答案。对不起:(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
部分并重新使用xcdatamodel d 中的fileRef
和所有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 */
很抱歉答案很长......但问题解决了:D
答案 3 :(得分:2)
这仍然是Xcode 8中的一个问题。
对我来说,简单的解决方案是将我的.xcdatamodeld文件从(黄色)子组文件夹中拖动(在项目文件导航器窗格内 - Xcode的左侧)到应用程序下的最高级别(一个用蓝色图标)。 在那之后,它立即与编辑一起打开。
我通过将其拖回子组重新进行测试,并且它再次无法在编辑器中打开,然后返回到顶层并正确打开... 我不知道为什么会这样,但至少我可以再次编辑它。
希望这有助于某人。
答案 4 :(得分:1)
重新启动Xcode通常会解决此问题。
答案 5 :(得分:1)
以下是我解决问题的方法:
问题解决了。
答案 6 :(得分:0)
在第一次选择时会发生这种情况,但是选择另一个类然后返回到dataModel允许在没有CoreData的情况下编辑新项目,然后将coreData模型添加到项目中。
只是想一想,您是否添加了实体,或者您甚至无法访问数据模型视图?
答案 7 :(得分:0)
我在Xcode中解决了这个问题:
右键单击您的项目(不是您的项目文件夹,我的意思是一个带有蓝色Xcode图标!),而不是选择“新文件”并选择正确的用于保存数据模型的文件夹。
注意:单击项目文件夹本身或其某个子文件夹上的“新建文件”无法以某种方式工作..