2012-05-18 17 views
10

Ok por lo que este es el error que estoy recibiendo'NSInternalInconsistencyException', razón: "Foo" no es una subclase de NSManagedObject

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '"Place" is not a subclass of NSManagedObject.' 

supongo que lo que significa es que 'Lugar' no ha sido agregado como una entidad al modelo de datos central ??? Pero como lo muestra la imagen a continuación.

Supongo que mi suposición es incorrecta, por lo que cualquier ayuda o idea sería agradable.

estoy bastante seguro de que esta es la línea que lo causa:

NSManagedObject* place = [NSEntityDescription 
           insertNewObjectForEntityForName:@"Place" 
           inManagedObjectContext:context]; 
+0

¿Es 'context' válido cuando ejecuta esa línea? (No-nil, tiene una conexión con el coordinador de tienda persistente ....) –

Respuesta

23

Si no está utilizando clases personalizadas (no hay lugar [HM].), Como parece como si no lo está, compruebe la ficha Entidad, y asegúrese de que el nombre Clase está en blanco (= NSManagedObject) - no Place .

+0

¡Campeón! No recuerdo tocar eso. ¿Qué hubiera causado que cambiara? – user1135469

+0

Supongo que una subclase para la entidad es en realidad la predeterminada. – paulmelnikow

+0

Gracias @noa :) me salvaste el tiempo ... – Rupesh

-1

La otra forma de solucionar este problema es utilizar efectivamente la subclase NSManagedObject (recomendado).

Place *place = [NSEntityDescription 
          insertNewObjectForEntityForName:@"Place" 
          inManagedObjectContext:context]; 
+0

Hacer lugar a una subclase de NSManagedObject requeriría un enfoque diferente al presente. Cambiar el tipo de variable no afectará la clase del objeto. – paulmelnikow

+0

No, no lo haría. Como se ha señalado, es el valor predeterminado y, por lo tanto, recomendado. Es, por ejemplo, mucho más seguro usar nombres de atributos explícitos que acceder a los atributos a través de la codificación de valores clave. – Mundi

12

Tuve el mismo problema con las clases llamadas Mensaje y Conexión. El error acaba de aparecer después de agregar un recurso de correo electrónico utilizando la biblioteca MessageUI. Creo que el conflicto ocurre porque la biblioteca tendrá clases llamadas Mensaje y Conexión, por lo tanto, no se ve que sean subclases de NSManagedObject. Cambiar sus nombres por prefijo (en mi caso con una X) hace que las entidades sean únicas. Pretendo agregar todas mis entidades en el futuro para que haya menos posibilidades de que surja el conflicto.

+1

Doh, buen descubrimiento. Tenía una entidad llamada Mensaje que arrojaba esto fatal. –

+0

Literalmente tuve exactamente el mismo problema, con una clase llamada 'Conexión'. Prefijo el nombre funcionó muy bien, gracias. –

0

Lo primero que debe hacer cuando se encuentra con este tipo de errores es verificar el nombre de clase de entidad:

  • abierto XCDataModel
  • Seleccione su entidad
  • Abrir el panel derecho Utilidades
  • Haga clic en el botón "mostrar el inspector del modelo de datos"
  • Verifique el nombre de la clase para que esté sincronizado con su modelo generado

Espero que esto ayude!

Cuestiones relacionadas