web-dev-qa-db-ja.com

「ファイル名は同じ名前のプライベート宣言を区別するために使用されます」エラー

SwiftのXcode 8.1でNSManagedObjectを生成すると、このエラーが発生します。

:0:エラー:ファイル名「DemoOne + CoreDataClass.Swift」が2回使用されています: '/ Users/Swasidhant/Desktop/demo again/DemoOne + CoreDataClass.Swift'および '/ 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:注:ファイル名は、同じ名前のプライベート宣言を区別するために使用されます:0 :エラー:ファイル名 "DemoOne + CoreDataProperties.Swift"が2回使用されました: '/ Users/Swasidhant/Desktop/demo again/DemoOne + CoreDataProperties.Swift'および '/ Users/Swasidhant/Library/Developer/Xcode/DerivedData/demo_again-hiinrbwwbmyfbrbctsfdzvudkvyk Build/Intermediates/demo again.build/Debug-iphonesimulator/demo again.build/DerivedSources/CoreDataGenerated/Model/DemoOne+CoreDataProperties.Swift ':0:注:ファイル名は、同じ名前のプライベート宣言を区別するために使用されますCommand/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefaul t.xctoolchain/usr/bin/swiftcが終了コード1で失敗しました

これを検索して、ファイルがプロジェクトに2回存在する可能性があるという回答を得ましたが、これは私の場合ではありません。私が出くわした別の解決策は、ビルド段階からファイルを削除し、再度追加することでした。それもうまくいきませんでした。ビルド設定の構成の間違いですか?または、他の何か?

Xcode 8.1で作成され、この問題を示しているデモプロジェクトとのリンクを次に示します。- https://www.dropbox.com/s/xwyzhshktb2hqe7/demo2.zip?dl=0

41
Swasidhant

この問題は、Xcode自動サブクラス生成機能が原因で発生しています。

コアデータの新機能

Xcodeの自動サブクラス生成

Xcodeは、モデリングツールでNSManagedObjectサブクラスの自動生成をサポートするようになりました。エンティティインスペクターで:

  • Manual/Noneはデフォルトであり、以前の動作です。この場合、独自のサブクラスを実装するか、NSManagedObjectを使用する必要があります。
  • Category/Extensionは、ClassName + CoreDataGeneratedPropertiesのような名前のファイルにクラス拡張を生成します。メインクラスを宣言/実装する必要があります(Obj-Cの場合、ヘッダーを介して拡張機能はClassName.hという名前をインポートできます)。
  • クラス定義は、ClassName + CoreDataClassのような名前のサブクラスファイルと、カテゴリ/拡張用に生成されたファイルを生成します。

生成されたファイルはDerivedDataに配置され、モデルが保存された後の最初のビルドで再構築されます。また、Xcodeによってインデックスが作成されるため、コマンドキーを押しながら参照をクリックし、ファイル名ですばやく開くことができます。


したがって、問題を修正するには、以下に示すようにCodegenフィールド値をManual/Noneに設定する必要があります。 Core Data Codegen

106
Midhun MP

これは私がこの問題を修正するためにしたことです。

  1. データモデルでエンティティを選択します
  2. モジュール現在の製品モジュールに設定します
  3. CodegenClass DefinitionのままにしますManual/Noneも機能します
  4. エディター> NSManagedObjectサブクラスの作成を選択します
12
superm0

誰かを助けるかもしれません、プロジェクトに移動してソースをコンパイルし、余分な参照がある場合は削除します。

6
Naveen Shan

コードデータモデルを選択し、エンティティを選択して、「Codegen」の値をManual/Noneに変更します。

それが動作します。

5
Yogendra Singh

この問題は、私のプロジェクトの「Extensions.Swift」という名前の2番目のファイルが原因でした。

重複した「Extensions.Swift」を削除した後、エラーは解決しました。エラーメッセージから、どのファイルが複製されているかがわかります。

3
Darkwonder

私の場合、Data Model(例:MyCoreData.xcdatamodeld)がEditor-> Create NSManagedObject Subclass ...の下に2回リストされていました。

私がしたこと:

  1. MyCoreData.xcdatamodeldファイルを削除しました。
  2. MyCD.xcdatamodeldの例として別のデータモデルを作成しました。
  3. チェックされているのは、ここで複製されたデータモデルです。エディター-> NSManagedObjectサブクラスの作成...
  4. クリーンで、後で2回ビルドします。
0
Ramis

エンティティをコピーして名前を変更したとき、私に起こりました。クラスの名前変更に失敗したため、手動で変更してください。

0
catanore