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

为君一笑 提交于 2020-01-19 06:53:31

问题


I am getting this error on generating an NSManagedObject in Xcode 8.1 in Swift.

: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

I searched for this and got answers saying the file might be present twice in the project which is not my case. Another solution I came across was to remove the file from the build phase and add again. That too didn't work. Is it some build setting configuration mistake ? Or something else?

Here is the link with a demo project created with Xcode 8.1 and showing this problem:- https://www.dropbox.com/s/xwyzhshktb2hqe7/demo2.zip?dl=0


回答1:


The issue is happening because of the Xcode automatic subclass generation feature.

According to 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.


So for fixing your issue, you need to set the Codegen field value to Manual/None as shown below:




回答2:


This is what I did to fix this issue,

  1. Select your entity in the data model
  2. Set the Module to Current Product Module
  3. Leave the Codegen to Class Definition though Manual/None also works
  4. Select Editor > Create NSManagedObject Subclass



回答3:


May help someone, Go to project compile source delete the extra reference if any.




回答4:


Select code data model then select the Entity change the value of 'Codegen' to Manual/None.

It will work.




回答5:


The issue was due a second file named:"Extensions.swift" in my project.

After deleting the duplicate "Extensions.swift" the error got resolved. Your error message might tel you which file is duplicated.




回答6:


In my case Data Model (as example: MyCoreData.xcdatamodeld) was listed twice under Editor -> Create NSManagedObject Subclass... And here was reason why it was getting this type of error.

What I did:

  1. I did delete MyCoreData.xcdatamodeld file.
  2. Created another Data Model as example MyCD.xcdatamodeld.
  3. Checked is here duplicated Data Models in here: Editor -> Create NSManagedObject Subclass...
  4. Clean and later build for two times.



回答7:


It happened to me when I copied and renamed entity. It failed to rename the class, so do it manually.




回答8:


I just restart my Macbook and that clean my build folder. And it works like a charm!



来源:https://stackoverflow.com/questions/40366329/filenames-are-used-to-distinguish-private-declarations-of-the-same-name-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!