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中不可见。 所以我删除了这些文件,清除了这个障碍。

我现在很开心。