2016-07-04 50 views
25

我試圖從我的數據模型生成NSManagedModels。代作品,但之後我得到了很多錯誤:使用CoreData生成器在DerivedData文件夾中複製文件

error: filename "Station+CoreDataProperties.swift" used twice: '/Users/Me/MyApp/Models/CoreData/Station+CoreDataProperties.swift' and '/Users/Me/Library/Developer/Xcode/DerivedData/MyApp-gwacspwrsnabomertjnqfbuhjvwc/Build/Intermediates/MyApp.build/Debug-iphoneos/MyApp.build/DerivedSources/CoreDataGenerated/Model/Station+CoreDataProperties.swift' :0: note: filenames are used to distinguish private declarations with the same name

我試圖乾淨生成文件夾,並derivedData目錄硬刪除。我正在使用Xcode 8 BETA也許這是一個錯誤?

+0

嘗試刪除得出的數據,Xcode中 - >文件 - >項目設置。 – 2016-07-04 18:39:15

+0

@AlvinVarghese點亮我在我的帖子中說硬刪除不起作用!謝謝 – Ludovic

+0

檢查你的項目目錄再次檢查'''Station + CoreDataProperties.swift'''不存在兩次。 – 2016-07-04 18:57:27

回答

48

我得到這個在Xcode 8.1 對我來說,下面的步驟來解決這個問題。請注意,訂單很重要。

1)在覈心數據模型中創建實體。

2)在課堂課下,進行如下圖所示的設置。

模塊:當前產品名稱

代碼生成:手動/無

3)生成您的NSManagedObject子類。

enter image description here

+3

對於其他人,如果你的Core Data模型是在嵌入式框架中,你需要將'Module'設置爲'Global',否則你會最終會有兩個版本的子類被編譯(Xcode自動生成的,以及你定義的)。當你做這個改變時,確保你重新創建了你的子類!如果你不這樣做,你最終會有錯誤 – toast

+0

太棒了!它的工作! – marko

3

這不是一個錯誤。 Codegen在DerivedData文件夾中生成這些文件,所以你不需要在你的項目中再次創建它們,因此編譯錯誤。

在Xcode 8.0版本說明:

Xcode automatically generates classes or class extensions for the entities and properties in a Core Data data model. Automatic code generation is enabled and disabled on an entity by entity basis, and is enabled for all entities in new models that use the Xcode 8 file format. This feature is available for any data model that has been upgraded to the Xcode 8 format. You specify whether Xcode generates Swift or Objective-C code for a data model using the data model’s file inspector.

When automatic code generation is enabled for an entity, Xcode creates either a class or class extension for the entity as specified in the entity's inspector: the specified class name is used and the sources are placed in the project’s Derived Data. For both Swift and Objective-C, these classes are directly usable from the project’s code. For Objective-C, an additional header file is created for all generated entities in your model. The header file name conforms to the naming convention 「DataModelName+CoreDataModel.h」.

然而,如果在數據模型檢查器的代碼生成下拉菜單下選擇類別/擴展(因爲你要添加邏輯模型):codegen將錯誤地生成類定義和屬性擴展

解決方案是簡單地刪除屬性擴展名(ClassName + CoreDataProperties.swift)。您的項目現在應該編譯。

+0

請檢查Apple Bug Reporter並重新閱讀我的文章!Apple解決了此問題8.1。 – Ludovic

7

這確實不是一個錯誤。正如@Morrowless建議創建類定義和屬性擴展。如果不需要,請在Codegen 下選擇手動/無,然後在之前生成代碼。如果代碼已經生成,只需刪除它們,然後再次從菜單中嘗試Editor->Create NSManagedObject Subclass...(在設置Manual/None之後)。

請注意,在下圖中,類名'聯繫'是特定於我的項目。你會看到你的實體名稱。

enter image description here

+0

請檢查Apple Bug Reporter並重新閱讀我的文章!Apple用8.1解決了這個問題 – Ludovic

+0

剛剛下載8.1添加了一個TestEntity到我的模型並添加了兩個屬性String和Date,並從菜單創建NSManagedObjectSubclass。不出我意外的是,我仍然得到錯誤,因爲這不是第一位的錯誤。我上面的解決方案可以解決問題。您需要將'Module'設置爲'Current Product Module'和'Codegen'爲'Manual/None'。 – oyalhi

+0

手動設置在我的項目中,更新到8.1解決了我的問題。看看bug跟蹤器。但如果用戶沒有設置手動模式,那麼它就不是一個bug :) – Ludovic

0

繼從oyalhi和弗拉基米爾Shutyuk,(刪除NSManagedObject文件,改變實體codegenManual/None)的指導下,我不得不重新啓動的Xcode一遍允許索引之前,我可以重新生成NSManagedObject文件並獲得成功的編譯。

8

這篇文章大大幫助我自己解決了這個問題。我個人認爲這是一個Xcode錯誤。錯誤與否這是一個巨大的雞和雞蛋的情況。使用核心數據

  • 生成的你NSManagedObject子+擴展名(而codegen: ClassDefinition
  • 我不小心保存在錯誤的文件夾
  • 生成的類

    1. 創建一個新的項目:

      我就遇到了這個由

    2. 我刪除了生成的文件
    3. 在我想要的文件夾中重新生成
    4. - Xcode的used twice錯誤

    正如其他人發佈我一直在清理我的版本(和clean build folder),但從來沒有固定的構建問題。

    我終於想通了,如果你最初創建的NSManagedObject生成的類與codegen: ClassDefinition,因爲我不知道,那麼你是因爲雞和雞蛋問題被鎖定。

    然後我刪除了自動生成的類想着我不得不重新生成,所以我做了。一旦重新生成,我會再次得到used twice構建錯誤。我手動進入../DerivedSources/CoreDataGenerated/Model/..並刪除重複項。再一次,我重新產生的想法,我只有1份(在我的項目中),但我錯了。如果最初設置了codegen: ClassDefinition,則Xcode將繼續創建auto-generated類+擴展,並將它們放置在掩埋文件夾../DerivedSources/CoreDataGenerated/Model/..中。我重複了這隻雞和雞蛋幾次,然後纔開始。

    我後來意識到確實需要標記​​然而爲了讓事情恢復同步,您需要刪除../DerivedSources/CoreDataGenerated/Model/..和項目中的自動生成文件,如果您還有任何問題。

    小心設置​​,對我來說有點棘手,因爲​​不會。我不得不多次在實體之間來回點擊來雙倍/三重檢查每個實體設置爲​​。 然後自動生成文件。此時,您自動生成的文件的唯一副本應該位於您的項目中,而不是../DerivedSources/CoreDataGenerated/Model/..

    最後,我認爲這是一個錯誤,因爲如果你指定​​我不希望Xcode自動生成文件,但它確實會把它們放到你的項目中。如果你的設置是codegen: ClassDefinition,更讓人困惑的是,誰知道Xcode會將這些文件放在一個隱藏的目錄中,但它可以在你的項目中使用。我的牛肉與這是自動生成的文件不受源代碼控制,如果我改變計算機,我必須知道在新站上自動生成它們。

    希望這可以幫助別人!

    乾杯!

    4

    如果您生成的CoreData子類與codegen: ClassDefinition你的基本擰。修復它的唯一方法是:

    1. 刪除您的CoreData子類。
    2. 刪除您的派生數據文件夾。
    3. 清理您的項目(CMD + K)。
    4. 生成新CoreData的子類,這次選擇Codegen: Manual/NoneModule: Current Product Module
    +0

    他沒有搞砸刪除'DerivedData',將每個實體的'Codegen'屬性更改爲'Manual/None',然後清理和構建就可以完成。並重新創建CoreData子類。 –

    相關問題