Core data 使用CoreData生成器在DerivedData文件夹中复制文件

Core data 使用CoreData生成器在DerivedData文件夹中复制文件,core-data,swift3,xcode8,Core Data,Swift3,Xcode8,我正在尝试从我的数据模型生成NSManagedModels。生成工作正常,但在我遇到许多错误之后: 错误:文件名“Station+CoreDataProperties.swift”使用了两次: “/Users/Me/MyApp/Models/CoreData/Station+CoreDataProperties.swift”和 “/Users/Me/Library/Developer/Xcode/DerivedData/MyApp gwacwrsnabomertjnqfbuhjvwc/Build

我正在尝试从我的数据模型生成NSManagedModels。生成工作正常,但在我遇到许多错误之后:

错误:文件名“Station+CoreDataProperties.swift”使用了两次: “/Users/Me/MyApp/Models/CoreData/Station+CoreDataProperties.swift”和 “/Users/Me/Library/Developer/Xcode/DerivedData/MyApp gwacwrsnabomertjnqfbuhjvwc/Build/Intermediates/MyApp.Build/Debug iphoneos/MyApp.Build/DerivedSources/CoreDataGenerated/Model/Station+CoreDataProperties.swift” :0:注意:文件名用于区分私有 同名声明


我尝试清理构建文件夹和derivedData目录硬删除。我使用的是Xcode 8 BETA版,可能是个bug?

这不是bug。Codegen在DerivedData文件夹中生成这些文件,因此您不需要在项目中再次创建它们,因此出现编译错误

从Xcode 8.0发行说明:

Xcode自动为核心数据模型中的实体和属性生成类或类扩展。自动代码生成是逐个实体启用和禁用的,并且对使用Xcode 8文件格式的新模型中的所有实体启用。此功能可用于升级到Xcode 8格式的任何数据模型。您可以使用数据模型的文件检查器指定Xcode是为数据模型生成Swift代码还是Objective-C代码

当为实体启用自动代码生成时,Xcode将创建 中指定的实体的类或类扩展 实体的检查器:使用指定的类名和源 放置在项目的衍生数据中。对于Swift和 Objective-C,这些类可以直接从项目的 代码。对于Objective-C,将为所有 在模型中生成的实体。头文件名符合 命名约定“DataModelName+CoreDataModel.h”

但是如果您在数据模型检查器的codegen下拉菜单下选择了类别/扩展(因为您想向模型添加逻辑):codegen将错误地生成类定义和属性扩展


解决方案是简单地删除属性扩展(ClassName+CoreDataProperties.swift)。您的项目现在应该可以编译了。

这确实不是一个bug。正如@Morrowless所建议的,类定义和属性扩展都已创建。如果不需要,请在生成代码之前,在Codegen下选择手动/None。如果代码已经生成,只需删除它们,然后再次尝试从菜单中创建NSManagedObject子类…(设置手动/无后)

注意,在下图中,类名“Contact”是特定于我的项目的。您将看到您的实体名称

我在Xcode 8.1中得到了这个 对我来说,以下步骤解决了这个问题。请注意,订单很重要

1) 在核心数据模型中创建实体

2) 在“类”部分下,按下图所示进行设置

模块:当前产品名称

Codegen:手动/无

3) 生成NSManagedObject子类


遵循oyalhi和Vladimir Shutuk的指导后,(删除
NSManagedObject
文件,将实体
codegen
更改为
手动/无
),在重新生成
NSManagedObject
文件并获得成功编译之前,我必须重新启动Xcode以允许它再次索引。

这篇文章极大地帮助我自己解决了这个问题。我个人认为这是一个Xcode错误。不管有没有虫子,这是一个巨大的鸡和蛋的情况

我是通过以下方式发现这一点的:

  • 使用核心数据创建了一个新项目
  • 生成我的
    NSManagedObject
    子类+扩展(而
    codegen:ClassDefinition
  • 我不小心将生成的类保存在了错误的文件夹中
  • 我删除了生成的文件
  • 在我想要的文件夹中重新生成

  • 如果您使用
    codegen:ClassDefinition
    生成了CoreData子类,则基本上是错误的。解决此问题的唯一方法是:

  • 删除CoreData子类
  • 删除派生数据文件夹
  • 清理项目(CMD+K)
  • 生成新的CoreData子类,这次选择
    Codegen:Manual/None
    Module:Current Product Module

  • 为了完整起见……:

    我只是遇到了同样的错误,但提出的解决方案都不起作用。让我感到困惑的是,对于一个(我认为)有问题的实体,即使从自动代码生成切换到手动代码生成,也没有起到任何作用

    最后,我发现有几个实体具有相同的名称,但它们都共享相同的类名。原因是我复制粘贴了一个实体几次,以节省一些工作,因为它们也有一些共同的属性

    结果表明,XCode通过添加1、2、,。。。更改为实体名称,但保留类名不变。由于现在实体名和类名是“不相关的”,重命名实体也不会改变类名


    希望它能帮助别人-我也为此提交了一份错误报告。

    尝试删除派生数据,Xcode->File->Project Settings。@alvinvaghese Lit我在帖子中说过硬删除不起作用!感谢检查您的项目目录,再次检查
    站点+CoreDataProperties.swift
    不存在两次。您正在使用
    cocoapods
    ?如果是,则必须指定
    use\u框架podfile
    中添加code>并重新构建。请查看Apple Bug Reporter并再次阅读我的帖子!苹果用8.1解决了这个问题。请查看Apple Bug Reporter并再次阅读我的帖子!苹果用8.1解决了这个问题。刚刚下载了8.1。增加了一个测试