Xcode正在寻找带有点的核心数据实体名称; 不编译
我一直在做一个项目,最近升级到了Xcode 8和Swift 3.0以及iOS 10.但是因为我这样做了,所以我一直无法编译。
我得到了我的每个实体的错误::0:错误:没有这样的文件或目录:''/Users/mark/Library/Developer/Xcode/DerivedData/…/.Account+CoreDataProperties.swift'每个案例有一个 。 (点)前的实体名称:.Account + CoreDataProperties.swift。
我将Code Gen从“Category / Extension”更改为Manual / None,我做了一个干净而干净的目录,删除了DerivedData目录。 有趣的是,当我查看相应的目录时,那里有一个实际的文件,没有点前缀。
这很混乱。 任何人都可以解释吗? 我需要解决这个问题才能继续核心数据。
TIA Mark
点文件由Xcode8生成。 参见WWDC2016 。 由于另一个问题导致删除派生数据后,我遇到了同样的问题。
两个可能的修复:
1)推荐的现代方法
- 如果存在,从您的项目中删除所有生成的NSManagedObject子类。
- 在所有实体的
.xcdatamodel
设置为Class Definition
- 确保
Module
是空的(“全局命名空间”,浅灰色)(解决Apple bug,请参阅@Chris Hansons答案 )
- 清洁项目
- 清理DerivedData文件夹
注意:即使你没有在你的项目中看到生成的文件,Xcode有一个引用,所以你可以写扩展等。 例如:
extension MyEntity { func doSomething() { // } }
此外,你可以命令+点击Xcode中生成的文件。
2)一个相当偏执但是子弹头certificate的方法,忽略了新的Xcodefunction
- 如果存在,从您的项目中删除所有生成的NSManagedObject子类。
- 在所有实体的
.xcdatamodel
设置为Manual/None
- 清洁项目
- 清理DerivedData文件夹
- 重新启动Xcode
- 手动生成
NSManagedObject
子类(在“编辑器”菜单中) - 确保这些文件已添加到您的项目
- build立
如果问题仍然存在,请重复:
- 清洁项目
- 清理DerivedData文件夹
- 重新启动Xcode
当实体的模块被设置为“当前产品模块”时(例如在Swift命名空间内而不是在全局Objective-C命名空间内),就会发生这种情况。
解决方法是除去实体的“模块”字段的自定义,所以它具有默认值“全局命名空间”(浅灰色文本)。
我将Code Gen从“Category / Extension”
将Codegen更改为类定义。
现在摆脱你在代码中做的事情,把你的实体变成伪类。 你的实体现在是真正的类 !
您现在可以大幅削减代码。 您不再需要强制将实体types指定为类。 当你读取Person对象时,你的读取结果是Person上的generics参数,所以每个读取的对象都是一个Person。 同样,要创build一个新的Person,只需调用Person(context:)
并configuration,然后保存该商店。 单词“实体”可能会在您的代码中的任何地方停止存在。
我已经解决了。 我正要重新构build整个应用程序,以避免出现问题,我注意到实体类文件在目录中,即使它们在Xcode中不可见。 所以我删除了这些文件,清除了这个障碍。
我现在很开心。