Xcode-beta 8. No se pueden crear datos centrales.

He estado tratando de agregar datos básicos. Y cada vez que recibí el mismo error:

error: filename "EntityName +CoreDataClass.swift" used twice: '/Users/userName/Desktop/Development/MyApp/AppName/EntityName +CoreDataClass.swift' and '/Users/userName/Library/Developer/Xcode/DerivedData/AppName-dgwzrmxsetzvtedibxrazuutjwnh/Build/Intermediates/AppName.build/Debug-iphoneos/AppName.build/DerivedSources/CoreDataGenerated/Model/EntityName +CoreDataClass.swift' 

Agrego datos principales usando los siguientes pasos:
1. Nuevo file / DataModel; guárdelo en el directory raíz de mi proyecto
select Model.xcdatamodeld y agregue la entidad, agregue varios attributes, guarde, edite / cree la subclass NSManagedObjectClass.

Como resultado, observo 4 nuevos files en el browser: Model.xcdatamodeld, EntityName + CoreDataProperties.swift, EntityName + CoreDataClass.swift, _COREDATA_DATAMODELNAME_ + CoreDataModel.swift

su contenido: _COREDATA_DATAMODELNAME_ + CoreDataModel.swift:

 import Foundation import CoreData ___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___ 

EntityName + CoreDataClass.swift:

 import Foundation import CoreData class EntityName: NSManagedObject { } 

EntityName + CoreDataProperties.swift:

 import Foundation import CoreData extension EntityName { @nonobjc class func fetchRequest() -> NSFetchRequest< EntityName > { return NSFetchRequest< EntityName >(entityName: "EntityName"); } @NSManaged var str: String? } 

Lo que he intentado:
1. Limpie compilation, elimine DerivedData, elimine el contenido de var / carpetas, reinicie
2. Eliminar los files generados, que se muestran en el browser

Todos mis esfuerzos no tuvieron suerte.
¿Que estoy haciendo mal?

Xcode 8 incluye generación automática de classs NSManagedObject cuando el file model utiliza el formatting de file Xcode 8. Si crea sus propios files de subclass, está creando duplicates. El segundo file en el post de error, en DerivedSources , es el que Xcode creó automáticamente.

Si los files generados automáticamente hacen lo que necesita, simplemente deje de crear los suyos y estará bien.

Si desea crear sus propias subclasss en su lugar, puede

  • Establezca la "versión de herramientas" para que el file de model sea Xcode 7.3 o anterior para deshabilitar toda generación de código (esto no parece cambiar nada significativo sobre el contenido real del file), o
  • Desactive la generación automática para cada entidad individualmente configurando la configuration "Codegen" en "Manual / Ninguno" para la entidad.

Hay dos errores en XCode 8 aquí:

1 – Si cambia el menu desplegable Codegen, su nuevo valor no se guarda en Model.xcdatamodel. Tienes que cambiar algo para que se guarde. Por ejemplo, cambie el nombre de la class; build; cambiar el nombre de la class de nuevo; build de nuevo

2 – El código generado se coloca en DerivedData en la carpeta Intermediates, pero solo sucede si la carpeta no existe. La solución es hacer una limpieza y luego una construcción.

De hecho, estoy teniendo el mismo problema (usando Swift) y sospecho que es un error. Si entiendo correctamente, el OP está utilizando las subclasss autogen NSManagedObject de Xcode y luego no está creando subclasss adicionales (superfluas) que parecen ser una fuente de cierta confusión.

Pasos para reproducir:

  1. Cree un nuevo proyecto, una sola vista. Marque "Usar datos básicos"

  2. Cree una entidad en la entidad model, agregue properties, asegúrese de que el file se guarda (a veces Xcode 8 Beta arroja los datos si no se guardan explícitamente)

  3. Seleccione Editor -> subclass NSManagedObject creada. Marque los cuadros relevantes

Xcode crea 3 files:

  1. COREDATA_DATAMODELNAME_ + CoreDataModel.swift. Este file está dañado y contiene inputs no válidas siguiendo instrucciones para importar Foundation y CoreData: el proyecto no se comstackrá a less que este file se borre

     import Foundation import CoreData ___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___ 
  2. EntityName + CoreDataClass.swift

  3. EntityName + CoreDataProperties.swift

Aunque el editor no marca ningún error en este punto, los bashs de comstackr fallan por los motivos enumerados por el OP (es decir, los files faltantes con los mismos nombres pero con un prefijo '.' En la carpeta DerivedData)

Si crea las subclasss NSManagedObject manualmente después de crear su model sin utilizar el auto-gen evidentemente dañado de Xcode, no hay problemas. ¡Un poco más de tipeo pero mucho más confiable! Sin embargo, deberá comenzar desde un proyecto 'limpio' (es decir, antes de intentar generar automáticamente las subclasss) de lo contrario, el error persiste. Limpiar datos derivados no ayudará tristemente.

***** ACTUALIZADO ***** Parece que hay algo extraño y sucede que parece haber una generación de código silencioso como se sugirió originalmente (disculpas), pero este comportamiento es muy diferente del que cabría esperar. Además, este código no está visible en el editor (lo que parece un poco inútil y confuso). Se crea en una subcarpeta de DerivedData> Generar> Intermediates> .Build.

Puedo ver completamente por qué el OP estaba confundido (¡como lo era yo!) Por lo que vale la pena, esta 'característica' es sin duda un bash de ser útil, pero es un tanto confusa si estás acostumbrado al comportamiento anterior y se te ofrece una opción para generar un duplicado visible y editable desde el menu principal.

Por lo tanto, select 'Manual / Ninguno' en la window Codegen (se muestra a continuación) y luego puede usar la opción de autogenerar en la barra de menus (después de borrar el 'junk') o escribir su propio código.

Nueva opción de código codificado XCode 8

Sigue estos pasos,

  1. Desactive la generación automática para cada entidad individualmente configurando la configuration "Codegen" en "Manual / Ninguno" para la entidad.

  2. Cambia el nombre de la entidad por otra cosa para que se guarde. Por ejemplo, cambie el nombre de la class; build; cambiar el nombre de la class de nuevo; build de nuevo

Tengo este error,

Solo cambie la versión de la herramienta a Xcode 7.3 en su file .xcdatamodeld

y funciona bien!

Para todos los que tienen problemas para que autogen funcione:

Tuve que configurar "com.apple.syncservices.Syncable" en "NO" en la configuration de Información del usuario para la Entidad.

Tal vez eso ayuda.

Tom Harrington La respuesta es correcta. Sin embargo, hay una manera de agregar sus propias funciones y / o vars sin hacer ninguna de las dos opciones mencionadas.

Simplemente cree una extensión para la class . (asegúrese de nombrar el file Swift algo diferente de los files NSManagesObject generados automáticamente estándar).

Por ejemplo. Si tiene una entidad llamada MyEntity , podría agregar un file rápido llamado MyEntityExtension.swift que podría ser similar a esto:

 import Foundation import CoreData import UIKit extension MyEntity { var color: UIColor { get { return self.colorValue as! UIColor } set { if newValue.isMember(of: UIColor.self) { self.colorValue = newValue } } } } 

Después de probar un puñado de respuestas publicadas, reiniciar mi máquina funcionó para mí.