ios - running - subir app a app store 2018
Xcode-beta 8. No se pueden crear datos básicos (8)
Después de probar un puñado de respuestas publicadas, reiniciar mi máquina funcionó para mí.
He estado tratando de agregar datos básicos. Y cada vez que tengo 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 básicos usando los siguientes pasos:
1.Nuevo archivo / modelo de datos; guárdelo en el directorio raíz de mi proyecto
seleccione Model.xcdatamodeld y agregue entity, agregue varios atributos, save, editor / create NSManagedObjectClass Subclass.
Como resultado, observo 4 archivos nuevos en el navegador: 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. Limpiar compilación, eliminar DerivedData, eliminar contenido de var / carpetas, reiniciar
2. Eliminar archivos generados, que se muestran en el navegador
Todos mis esfuerzos no tuvieron suerte.
¿Que estoy haciendo mal?
En realidad estoy teniendo el mismo problema (usando Swift) y sospecho que es un error. Si lo entiendo correctamente, el OP está usando las subclases NSG de AutoManagedObject de Xcode y posteriormente no crea subclases adicionales (superfluas) que parecen ser fuente de confusión.
Pasos para reproducir:
Crea un nuevo proyecto, aplicación de vista única. Marque "Usar datos principales"
Cree una entidad en la entidad modelo, agregue propiedades, asegúrese de que el archivo esté guardado (a veces Xcode 8 Beta arroja los datos si no se guardan explícitamente)
- Seleccione Editor -> Subclase NSManagedObject creada. Marque las casillas relevantes
Xcode crea 3 archivos:
COREDATA_DATAMODELNAME_ + CoreDataModel.swift. Este archivo está dañado y contiene entradas no válidas siguiendo instrucciones para importar Foundation y CoreData: el proyecto no se compilará a menos que se elimine este archivo
import Foundation import CoreData ___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___
EntityName + CoreDataClass.swift
EntityName + CoreDataProperties.swift
Aunque el editor no marca ningún error en este punto, los intentos de compilación fallan por los motivos enumerados por el OP (es decir, archivos perdidos con los mismos nombres pero con un prefijo ''.'' En la carpeta DerivedData)
Si crea las subclases NSManagedObject de forma manual después de crear su modelo sin utilizar la autogeneración de Xcode evidentemente con errores, 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 subclases), de lo contrario, el error persistirá. Limpiar datos derivados no ayudará tristemente.
***** ACTUALIZADO ***** Parece que pasa algo bastante extraño y parece que hay generación de código silencioso como se sugirió originalmente (disculpas), pero este comportamiento es muy diferente de lo que cabría esperar. Además, este código no está visible en el editor (lo que parece un tanto inútil y confuso). Se crea en una subcarpeta de DerivedData> Build> Intermediates> .Build.
Puedo ver por completo por qué el PO estaba confundido (¡como yo!) Por lo que vale, esta "característica" es, sin duda, un intento de ser útil, pero es algo confuso si estás acostumbrado al comportamiento anterior y te ofrecen una opción para generar un duplicado visible y editable del menú principal.
Por lo tanto, seleccione ''Manual / None'' en la ventana Codegen (que se muestra a continuación) y luego puede usar la opción de autogeneración en la barra de menú (después de eliminar la ''basura'') o escribir su propio código.
Hay dos errores en XCode 8 aquí:
1 - Si cambia el menú desplegable Codegen, su nuevo valor no se guarda en Model.xcdatamodel. Tienes que cambiar algo más para que salve. Por ejemplo, cambie el nombre de la clase; construir; cambiar el nombre de la clase hacia atrás; construir de nuevo
2 - El código generado se coloca en DerivedData en la carpeta Intermediates, pero solo ocurre si la carpeta aún no existe. La solución alternativa es hacer una limpieza y luego una compilación.
Para todos los que tienen problemas para hacer que autogen funcione:
Tuve que configurar "com.apple.syncservices.Syncable" en "NO" en la configuración de información del usuario para la entidad.
Quizás eso ayude.
Recibí este error,
solo cambie la versión de la herramienta a Xcode 7.3 en su archivo .xcdatamodeld
y funciona bien!
Sigue estos pasos,
Inhabilite la generación automática para cada entidad individualmente configurando la configuración "Codegen" en "Manual / None" para la entidad.
Cambia el nombre de la entidad a otra cosa para que se guarde. Por ejemplo, cambie el nombre de la clase; construir; cambiar el nombre de la clase hacia atrás; construir de nuevo
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.
Solo crea una extensión para la clase . (asegúrese de nombrar el archivo rápido como algo diferente de los archivos estándar de NSManagesObject generados automáticamente).
Por ejemplo. Si tiene una entidad llamada MyEntity
, puede agregar un archivo rápido llamado MyEntityExtension.swift
que podría verse más o menos así:
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
}
}
}
}
Xcode 8 incluye generación automática de clase NSManagedObject
cuando el archivo de modelo usa el formato de archivo Xcode 8. Si crea sus propios archivos de subclase, está creando duplicados. El segundo archivo en el mensaje de error, en DerivedSources
, es el que Xcode creó automáticamente.
Si los archivos generados automáticamente hacen lo que necesita, simplemente deje de crear el suyo y estará bien.
Si quiere crear sus propias subclases, puede
- Establezca la "versión de herramientas" para que el archivo de modelo sea Xcode 7.3 o anterior para deshabilitar toda la generación de código (esto no parece cambiar nada significativo sobre el contenido real del archivo), o
- Inhabilite la generación automática para cada entidad individualmente configurando la configuración "Codegen" en "Manual / None" para la entidad.