XCode Cant 'Edit CoreData Model

Después de agregar un model CoreData a mi proyecto existente usando

File > New > File... > Core Data > Data Model

No puedo editar el model. El proyecto ahora incluye una reference de package .xcdatamodeld, pero onclick en Project Navigator tiene el mismo efecto que hacer clic en una carpeta o grupo, el editor actual no cambia. También haciendo clic derecho en la reference y seleccionando "Abrir como>" no se enumeran posibles editores. Además, al abrir el panel del inspector de files solo se muestran las configuraciones para "Identidad" "Membresía de destino" y "Configuración de text", no muestra configuraciones para "Modelo de datos básicos" o "Modelo de datos principales modificados"

No es que esto deba tener algún efecto en la capacidad de XCodes para reconocer un tipo de file, pero también he hecho reference a CoreData.framework en las fases de compilation e he incluido las properties de Datos esenciales necesarias en AppDelegate.

Lo que es extraño es que he abierto el package .xcdatamodeld en Finder para exponer el .xcdatamodel interno (tenga en count que no hay 'd' posterior). Al hacer doble clic en ese file, se abrirá XCode con el Core Data Model Editor como se esperaba.

Aún más extraño es, creé un nuevo proyecto y presioné la casilla "Usar datos básicos". Al hacerlo, me permitió editar el model de datos seleccionando la reference de .xcdatamodeld en Project Navigator. Por lo tanto, mi máquina y XCode son capaces y configurados para editar files CoreData.

Es como si XCode no puede usar Core Data a less que el proyecto original se haya creado con la checkbox "Usar Core Data".

¿Alguien ha experimentado este problema, fue capaz de solucionarlo y cómo?

¡Gracias!

Resulta que estaba intentando agregar el model de datos a un grupo que hace reference a una carpeta específica en la que almacenar sus hijos. Sin embargo, esa carpeta no existía. Esto hace que XCode coloque el model de datos en la raíz del proyecto, pero al mismo time lo reference como residiendo 2 directorys sobre la raíz del proyecto. Lo que es incluso más extraño es que XCode no muestra el file como faltante al mostrarlo en rojo. De cualquier manera XCode ignoró el file cuando se hizo clic en Project Navigator, porque realmente no existía donde pensaba que lo hacía. La moraleja de la historia es: verifica las routes de los files y las routes de grupo configuradas.

Me encontré con este problema hoy, y el problema fue que mi file .xcdatamodel se empaquetó dentro de sí mismo (extraño, lo sé). He aquí cómo lo arreglé:

  1. Encontré mi file File.xcdatamodel en Finder.
  2. Haga clic con el button derecho y select Mostrar contenido del package .
  3. Dentro había otra copy de File.xcdatamodel . Lo copié a mi escritorio.
  4. Luego arrastré ese file a Xcode y se abrió.

Qué alivio. 🙂 Espero que esto ayude a alguien más.

Nuestro problema real era que Xcode no podía abrir / validar el model de datos al crear una nueva versión. Significado: tener primero un .xcdatamodel y luego Editor > Add Model Version... > MyProject 2 (como .xcdatamodel). Después de qué, se creó MyPoject.xcdatamodel d pero no se pudo abrir.

Después de horas investigando descubrimos que el file .xcurrentversion y el XCVersionGroup en el file del proyecto faltaban o no eran válidos. Una de las razones era que la versión xcdatamodel d debería estar en la carpeta raíz.

Solución rápida fácil 1:

Cree una nueva versión del model y:

  1. Establecer la ruta a la carpeta raíz
  2. Especifique el Group para que sea el subdirectory donde está la versión anterior.

El nuevo .xcdatamodel d ahora funcionará en Xcode, pero no se puede mover a ningún otro lugar que no sea la carpeta raíz .

Solución complicada 2:

Para tener un .xcdatamodel d en una subcarpeta, debe modificar manualmente el file de proyecto siguiendo estos pasos:

PS: Esta es la respuesta más complicada y hackeable que escribí. Lo siento 🙁

  1. Cree una nueva versión del model (aunque invalida el model de datos) en el mismo directory de la versión anterior.
  2. Asegúrese de que el nuevo file .xcdatamodel d se especifica en su (s) objective (s).
  3. Abra el Contenido del package en el Finder y arrastre y suelte todas las versiones de xcdatamodel en el proyecto.
  4. Abra el file project.pbxproj en un editor de text.
  5. Busque los nuevos files para todos los models de datos y copie su fileId .

Ejemplo:

 75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel in Sources */ = {isa = PBXBuildFile; fileRef = 75F319981B9D80D50030FF46 /* MyProject 2.xcdatamodel */; }; // fileId = 75F3199D1B9D80D50030FF46 /* The first id at the beginning of the line */ 
  1. Mueva esas líneas de la sección PBXBuildFile al comienzo de PBXFileReference y actualícelas de esta manera (reutilice el fileId del fileId ).

Ejemplo:

 75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MyProject 2.xcdatamodel"; sourceTree = "<group>"; }; 
  1. Ahora busque el file MyPoject.xcdatamodeld en la sección PBXBuildFile y copie su fileRef .

Ejemplo:

 75F319961B9D7FA50030FF46 /* MyProject.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */; }; // fileRef = 75F319931B9D7FA50030FF46 
  1. Finalmente, al final del file project.pbxproj , cree la sección XCVersionGroup y reutilice fileRef desde xcdatamodel d y all fileId .

Ejemplo (sin los // comentarios):

 /* Begin XCVersionGroup section */ 75F319931B9D7FA50030FF46 /* MyProject.xcdatamodeld */ = { // fileRed isa = XCVersionGroup; children = ( 75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */, // fileId 75F319A11B9D80D50030FF46 /* MyProject.xcdatamodel */, // fileId ); currentVersion = 75F3199D1B9D80D50030FF46 /* MyProject 2.xcdatamodel */; // fileId of the current version name = MyProject.xcdatamodeld; path = Path/To/MyProject.xcdatamodeld; // set the correct path sourceTree = "<group>"; versionGroupType = wrapper.xcdatamodel; }; /* End XCVersionGroup section */ }; rootObject = 7564EB681B4AB1560065394B /* Project object */; } /* EOF */ 
  1. Ahora debería ser capaz de abrir el file xcdatamodel d en Xcode ahora desde la subcarpeta deseada.
  2. Ahora elimine las references adicionales de los files xcdatamodel de xcode (los creados al principio).

Perdón por la larga respuesta … pero problema resuelto: D

Esto sigue siendo un problema en Xcode 8.

Para mí, la solución simple era arrastrar (dentro del panel del browser del file del proyecto, a la izquierda de Xcode) mi file .xcdatamodeld desde su carpeta de subgrupos (amarilla) hasta el nivel superior bajo la aplicación (el que tiene el azul icono). Después de eso, se abrió con el editor de inmediato.

Volví a realizar el análisis arrastrándolo al subgrupo, y de nuevo no lo abriría en el editor, luego volvería al nivel superior y se abriría correctamente … No tengo idea de por qué sucede esto, pero al less puedo editarlo de nuevo.

Espero que esto ayude a alguien.

Reiniciar Xcode generalmente se ocupa de este problema.

Así es como solucioné el problema:

  1. En el tree de files Xcode, eliminó el file .xcdatamodeld.
  2. Cuando abrí la carpeta del proyecto, el file estaba allí. (Xcode solo eliminó la reference).
  3. Lo he arrastrado al tree de files Xcode, marcado "Copiar elementos si es necesario". No hizo una copy porque entendió que el file ya se encuentra en la carpeta del proyecto.

Problema resuelto.

En la primera selección, este comportamiento sucede, pero al seleccionar otra class, volver al dataModel me permite editar en un nuevo proyecto sin CoreData, luego agregar el model coreData al proyecto.

Solo una idea, ¿agregó una entidad o incluso no puede acceder a la vista de model de datos?

Lo resolví así en Xcode:

Haga clic con el button derecho en su proyecto (¡no en la carpeta de su proyecto, es decir, en el icono de Xcode azul !), Que select "Nuevo file" y elija la carpeta correcta para save el model de datos.

Nota: Hacer clic en "Nuevo file" en la carpeta del proyecto o en una de sus subcarpetas no funcionó de alguna manera ..