'filenames are used to distinguish private declarations of the same name' 错误

'filenames are used to distinguish private declarations of the same name' error

我在 Swift 中的 Xcode 8.1 中生成 NSManagedObject 时遇到此错误。

:0: error: filename "DemoOne+CoreDataClass.swift" used twice: '/Users/Swasidhant/Desktop/demo again/DemoOne+CoreDataClass.swift' and '/Users/Swasidhant/Library/Developer/Xcode/DerivedData/demo_again-hiinrbwwbmyfbrbctsfdzvudkkuy/Build/Intermediates/demo again.build/Debug-iphonesimulator/demo again.build/DerivedSources/CoreDataGenerated/Model/DemoOne+CoreDataClass.swift' :0: note: filenames are used to distinguish private declarations with the same name :0: error: filename "DemoOne+CoreDataProperties.swift" used twice: '/Users/Swasidhant/Desktop/demo again/DemoOne+CoreDataProperties.swift' and '/Users/Swasidhant/Library/Developer/Xcode/DerivedData/demo_again-hiinrbwwbmyfbrbctsfdzvudkkuy/Build/Intermediates/demo again.build/Debug-iphonesimulator/demo again.build/DerivedSources/CoreDataGenerated/Model/DemoOne+CoreDataProperties.swift' :0: note: filenames are used to distinguish private declarations with the same name Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1

我搜索了这个并得到了答案,说该文件可能在项目中出现两次,但我的情况并非如此。我遇到的另一个解决方案是从构建阶段删除文件并再次添加。那也没用。这是一些构建设置配置错误吗?还是别的?

这是 link,其中包含使用 Xcode 8.1 创建的演示项目并显示了此问题:- https://www.dropbox.com/s/xwyzhshktb2hqe7/demo2.zip?dl=0

出现此问题是因为 Xcode 自动子类生成 功能。

根据What's New In Core Data

Xcode automatic subclass generation

Xcode now supports automatic generation of NSManagedObject subclasses in the modeling tool. In the entity inspector:

  • Manual/None is the default, and previous behavior; in this case you should implement your own subclass or use NSManagedObject.
  • Category/Extension generates a class extension in a file named like ClassName+CoreDataGeneratedProperties. You need to declare/implement the main class (if in Obj-C, via a header the extension can import named ClassName.h).
  • Class Definition generates subclass files named like ClassName+CoreDataClass as well as the files generated for Category/Extension.

The generated files are placed in DerivedData and rebuilt on the first build after the model is saved. They are also indexed by Xcode, so command-clicking on references and fast-opening by filename works.


因此,为了解决您的问题,您需要将 Codegen 字段值设置为 Manual/None,如下所示:

在我的案例中,数据模型(例如:MyCoreData.xcdatamodeld)在 Editor -> Create NSManagedObject Subclass... 下列出了两次,这就是为什么收到此类错误。

我做了什么:

  1. 我确实删除了 MyCoreData.xcdatamodeld 个文件。
  2. 创建了另一个数据模型作为示例 MyCD.xcdatamodeld。
  3. 这里检查了重复的数据模型:编辑器 -> 创建 NSManagedObject 子类...
  4. 清理并稍后构建两次。

这就是我解决这个问题的方法,

  1. Select 您在数据模型中的实体
  2. 模块设置为当前产品模块
  3. Codegen 保留为 Class 定义 尽管 Manual/None 也有效
  4. Select 编辑器 > 创建 NSManagedObject 子类

问题是由于我的项目中名为:"Extensions.swift" 的第二个文件引起的。

删除重复项后 "Extensions.swift" 错误得到解决。您的错误消息可能会告诉您哪个文件是重复的。

可能会帮助某人,去项目编译源删除多余的引用。

Select 代码数据模型然后 select 实体将 'Codegen' 的值更改为 Manual/None。

它会起作用。

当我复制并重命名实体时发生在我身上。重命名 class 失败,因此请手动重命名。

我只是重新启动了我的 Macbook 并清理了我的构建文件夹。它就像一个魅力!