core-data - mover - duplicar archivos y carpetas
Duplicar archivos en la carpeta DerivedData usando el generador CoreData (7)
Estoy intentando generar NSManagedModels desde mi modelo de datos. La generación funciona pero después de que recibí muchos errores:
error: filename "Station + CoreDataProperties.swift" usado dos veces: ''/Users/Me/MyApp/Models/CoreData/Station+CoreDataProperties.swift'' y ''/ Users / Me / Library / Developer / Xcode / DerivedData / MyApp-gwacspwrsnabomertjnqfbuhjvwc / Build / Intermediates / MyApp.build / Debug-iphoneos / MyApp.build / DerivedSources / CoreDataGenerated / Model / Station + CoreDataProperties.swift '': 0: nota: los nombres de archivo se usan para distinguir declaraciones privadas con el mismo nombre
Intento limpiar la carpeta de compilación y el directorio derivado de la eliminación de datos. Estoy usando Xcode 8 BETA tal vez es un error?
Después de seguir las instrucciones de oyalhi y Vladimir Shutyuk (eliminar los archivos de NSManagedObject
, cambiar la entidad codegen
a Manual/None
), tuve que reiniciar Xcode para poder volver a indexar antes de poder volver a generar los archivos de NSManagedObject
y obtener un archivo exitoso compilar.
En aras de la exhaustividad..:
Me encontré con el mismo error, pero ninguna de las soluciones propuestas funcionó. Lo que me desconcertó fue que incluso el cambio de generación de código automático a manual para la (como yo pensaba) entidad problemática no hizo nada.
Finalmente, descubrí que tenía varias entidades con el mismo nombre , pero todas compartían el mismo nombre de clase . La razón de esto fue que copié y pegué una entidad varias veces para ahorrarme algo de trabajo, porque también tienen algunos atributos en común.
Resulta que XCode cambia el nombre de los duplicados al agregar 1, 2, ... al nombre de la entidad, pero deja el nombre de la clase como antes. Y dado que ahora el nombre de la entidad y el nombre de la clase "no están relacionados", el cambio de nombre de la entidad tampoco cambiará el nombre de la clase.
Espero que ayude a alguien: también he presentado un informe de error para esto.
Esta publicación me ayudó mucho a resolver este problema yo mismo. Personalmente veo esto como un error de Xcode. Error o no es una gran situación de huevo y pollo.
Me encontré con esto por:
- Creó un nuevo proyecto usando Core Data
- Genere mi subclase
NSManagedObject
+ extension (whilecodegen: ClassDefinition
) - Accidentalmente guardé las clases generadas en la carpeta Wrong
- Eliminé los archivos generados
- Regenerado en la carpeta que quería
- 💥- Xcode
used twice
errores
Como otros publicaron, seguí limpiando mi compilación (y la clean build folder
) pero eso nunca solucionó el problema de compilación.
Finalmente descubrí que si originalmente creaste tus clases generadas por codegen: ClassDefinition
con codegen: ClassDefinition
, como lo hice sin saberlo, entonces estás bloqueado por el problema del huevo y la gallina.
Luego eliminé las clases generadas automáticamente pensando que tenía que volver a generar, así que lo hice. Una vez que volviera a generar, obtendría nuevamente el error de generación used twice
. Entré manualmente en ../DerivedSources/CoreDataGenerated/Model/..
y ../DerivedSources/CoreDataGenerated/Model/..
los duplicados . Nuevamente, volví a generar pensando que solo tendría 1 copia (en mi proyecto) pero estaba equivocado. Si codegen: ClassDefinition
se estableció originalmente, Xcode seguirá creando las clases + extensiones auto-generated
y las colocará en la carpeta enterrada ../DerivedSources/CoreDataGenerated/Model/..
Repetí este pollo y huevo varias veces antes de atraparme.
Más tarde me di cuenta de que sí necesitas marcar codegen: Manual/None
embargo, para volver a sincronizar las cosas, debes eliminar los archivos generados automáticamente en ../DerivedSources/CoreDataGenerated/Model/..
y en tu proyecto si tienes alguna allí todavía.
Tenga cuidado al configurar codegen: Manual/None
, para mí fue un poco complicado porque codegen: Manual/None
no se pegaría . Tuve que hacer clic varias veces entre entidades para verificar el doble / triple. Cada entidad se configuró en codegen: Manual/None
. A continuación, genere automáticamente los archivos. En este punto, su única copia de los archivos generados automáticamente debe estar en su proyecto y no en ../DerivedSources/CoreDataGenerated/Model/..
Por último, creo que es un error porque si especifica codegen: Manual/None
, no espero que Xcode genere automáticamente archivos, pero sí los incluye en su proyecto. Más confuso si su configuración es codegen: ClassDefinition
, ¿quién diablos sabe Xcode pondrá los archivos en un directorio codegen: ClassDefinition
pero está disponible para su uso en su proyecto. Mi problema con esto es que los archivos generados automáticamente no están controlados por el código fuente y si cambio de computadora, tengo que saber cómo generarlos automáticamente en la nueva estación.
¡Espero que esto ayude a alguien más!
¡Aclamaciones!
Esto de hecho no es un error. Como @Morrowless sugiere que se crean tanto la definición de clase como la extensión de propiedades. Si no se desea, seleccione Manual / None en Codegen antes de generar el código. Si el código ya está generado, simplemente Editor->Create NSManagedObject Subclass...
e intente Editor->Create NSManagedObject Subclass...
nuevamente en el menú (después de configurar Manual / None).
Tenga en cuenta que, en la imagen siguiente, el nombre de clase ''Contacto'' es específico de mi proyecto. Verás el nombre de tu entidad en su lugar.
Lo entiendo en Xcode 8.1. Para mí, los siguientes pasos resolvieron el problema. Tenga en cuenta que el orden es importante.
1) Crear entidad en el modelo de Datos básicos.
2) En la sección de clase, realice las configuraciones como en la imagen siguiente.
Módulo: nombre del producto actual
Codegen: Manual / Ninguna
3) Genere su subclase NSManagedObject.
Si generó las subclases de codegen: ClassDefinition
con codegen: ClassDefinition
básicamente está atornillado. La única forma de solucionarlo es:
- Borre sus subclases de CoreData.
- Borre su carpeta de datos derivados.
- Limpie su proyecto (CMD + K).
- Genere nuevas subclases de CoreData, esta vez seleccione
Codegen: Manual/None
yModule: Current Product Module
Esto no es un error. Codegen genera estos archivos en la carpeta DerivedData, por lo que no necesita crearlos nuevamente en su proyecto, de ahí el error de compilación.
De las notas de la versión de Xcode 8.0:
Xcode genera automáticamente clases o extensiones de clase para las entidades y propiedades en un modelo de datos de Datos Básicos. La generación automática de códigos se habilita y deshabilita entidad por entidad, y está habilitada para todas las entidades en los modelos nuevos que usan el formato de archivo Xcode 8. Esta función está disponible para cualquier modelo de datos que se haya actualizado al formato Xcode 8. Usted especifica si Xcode genera códigos Swift o Objective-C para un modelo de datos utilizando el inspector de archivos del modelo de datos.
Cuando la generación automática de código está habilitada para una entidad, Xcode crea una clase o extensión de clase para la entidad como se especifica en el inspector de la entidad: se utiliza el nombre de clase especificado y las fuentes se colocan en los datos derivados del proyecto. Tanto para Swift como para Objective-C, estas clases se pueden usar directamente desde el código del proyecto. Para Objective-C, se crea un archivo de encabezado adicional para todas las entidades generadas en su modelo. El nombre del archivo de encabezado cumple con la convención de nomenclatura "NombreModeloMódulo +ModeloDatabase.h".
Sin embargo , si seleccionó Categoría / Extensión en el menú desplegable de Codegen en el inspector de modelo de datos (porque desea agregar lógica a su modelo): codegen generará erróneamente tanto la definición de clase como la extensión de propiedades .
La solución es simplemente eliminar la extensión de propiedades ( ClassName + CoreDataProperties.swift). Tu proyecto ahora debe compilarse.