データモデルからNSManagedModelsを生成しようとしています。生成は動作しますが、多くのエラーが発生した後:
エラー:ファイル名 "Station + CoreDataProperties.Swift"が2回使用されています: '/Users/Me/MyApp/Models/CoreData/Station+CoreDataProperties.Swift'および '/ Users/Me/Library/Developer/Xcode/DerivedData/MyApp-gwacspwrsnabomertjnqfbuhjvwc/Build/Intermediates/MyApp.build/Debug-iphoneos/MyApp.build/DerivedSources/CoreDataGenerated/Model/Station + CoreDataProperties.Swift ':0:注:ファイル名は、同じ名前のプライベート宣言を区別するために使用されます
ビルドフォルダとderivedDataディレクトリを完全に削除してみてください。 Xcode 8ベータ版を使用していますが、これはバグでしょうか?
この投稿は、この問題を自分で解決するのに大いに役立ちました。個人的には、これをXcodeのバグと見なしています。バグかどうか、これは巨大な鶏と卵の状況です。
私はこれに遭遇しました:
NSManagedObject
サブクラス+拡張を生成しました(同時にcodegen: ClassDefinition
)used twice
エラー他の人が投稿したように、私は自分のビルド(およびclean build folder
)のクリーニングを続けましたが、ビルドの問題は決して解決しませんでした。
NSManagedObject
で生成されたクラスをcodegen: ClassDefinition
で最初に作成したかどうかを最終的に把握しました。知らないうちに、鶏肉と卵の問題に閉じ込められています。
その後、自動生成されたクラスを削除しました思考再生成する必要があったため、削除しました。再生成すると、used twice
ビルドエラーが再度表示されます。手動で../DerivedSources/CoreDataGenerated/Model/..
に入り、duplicatesを削除しました。繰り返しになりますが、私は(自分のプロジェクトで)1つのコピーしか持っていないと思って再生成しましたが、間違っていました。 codegen: ClassDefinition
が最初に設定されていた場合、Xcodeはauto-generated
クラス+拡張機能を作成し続け、それらを埋め込みフォルダ../DerivedSources/CoreDataGenerated/Model/..
に配置します。私はこの鶏肉と卵子を数回繰り返してから捕まえました。
後でcodegen: Manual/None
をマークする必要があることに気付きましたが、同期を取り戻すには、../DerivedSources/CoreDataGenerated/Model/..
およびプロジェクトがある場合はプロジェクトで自動生成されたファイルを削除する必要があります。
codegen: Manual/None
の設定には注意してください。私にとっては、codegen: Manual/None
はstickではないので、少し注意が必要です。各エンティティがcodegen: Manual/None
に設定されていることをダブル/トリプルチェックするには、エンティティ間を何度もクリックする必要がありました。 Thenファイルを自動生成します。この時点で、自動生成されたファイルの唯一のコピーは、../DerivedSources/CoreDataGenerated/Model/..
ではなくプロジェクトにあるはずです。
最後に、これはバグだと思います。codegen: Manual/None
を指定した場合、Xcodeがファイルを自動生成するとは思わないが、それでもプロジェクトにそれらを入れてしまうからです。設定がcodegen: ClassDefinition
の場合はさらに混乱します。Xcodeがファイルを埋もれたディレクトリに置くことを知っているのに、プロジェクトで使用できます。これで私の牛肉は、自動生成されたファイルはソース管理されていないので、コンピューターを変更する場合、新しいステーションでそれらを自動生成する必要があります。
これが誰かの助けになることを願っています!
乾杯!
codegen: ClassDefinition
を使用してCoreDataサブクラスを生成した場合、基本的にねじ込まれます。修正する唯一の方法は次のとおりです。
Codegen: Manual/None
およびModule: Current Product Module
を選択しますこれはバグではありません。 CodegenはこれらのファイルをDerivedDataフォルダーに生成するため、プロジェクトで再度作成する必要がないため、コンパイルエラーが発生します。
Xcode 8.0リリースノートから:
Xcodeは、Core Dataデータモデルのエンティティとプロパティのクラスまたはクラス拡張を自動的に生成します。自動コード生成は、エンティティごとに有効化および無効化され、Xcode 8ファイル形式を使用する新しいモデルのすべてのエンティティに対して有効化されます。この機能は、Xcode 8形式にアップグレードされたすべてのデータモデルで使用できます。 Xcodeがデータモデルのファイルインスペクターを使用して、データモデルに対してSwiftまたはObjective-Cコードを生成するかどうかを指定します。
エンティティの自動コード生成が有効になっている場合、Xcodeはエンティティのインスペクターで指定されたエンティティのクラスまたはクラス拡張を作成します。指定されたクラス名が使用され、ソースがプロジェクトの派生データに配置されます。 SwiftおよびObjective-Cの場合、これらのクラスはプロジェクトのコードから直接使用できます。Objective-Cの場合、追加のヘッダーファイルがモデル内の生成されたすべてのエンティティに対して作成されます。ヘッダーファイル名命名規則「DataModelName + CoreDataModel.h」に準拠しています。
ただし、データモデルインスペクターのcodegenプルダウンメニューでCategory/Extensionを選択した場合(モデルにロジックを追加するため):codegenはクラス定義とプロパティ拡張。
解決策は、プロパティの拡張子(ClassName + CoreDataProperties.Swift)を単に削除することです。これでプロジェクトがコンパイルされます。
OyalhiとVladimir Shutyukのガイダンスに従って(NSManagedObject
ファイルを削除し、エンティティcodegen
をManual/None
)、NSManagedObject
ファイルを再生成してコンパイルを成功させる前に、Xcodeを再起動してインデックスを再度作成する必要がありました。
完全を期すために..:
私はちょうど同じエラーに遭遇しましたが、提案された解決策はどれもうまくいきませんでした。私が困惑したのは、問題のあるエンティティの自動コード生成から手動への切り替えでさえ、何もしなかったことでした。
最後に、同じnameを持つエンティティが複数あることがわかりましたが、それらはすべて同じclassnameを共有しています。この理由は、いくつかの共通の属性もあるため、1つのエンティティを数回コピーして貼り付けて作業を節約したためです。
XCodeは、エンティティ名に1、2、...を追加して重複の名前を変更しますが、クラス名は以前のままにします。また、エンティティ名とクラス名は「無関係」であるため、エンティティの名前を変更してもクラス名は変更されません。
それが誰かを助けることを願っています-私はこれについてバグレポートも提出しました。