9

Estoy relativamente bien versado en CoreData y lo he usado durante varios años con poca o ninguna dificultad. Para la vida de mí, no puedo entender por quéinsertNewObjectForEntityForName: inManagedObjectContext: ¿devuelve error NSNumber?

insertNewObjectForEntityForName:inManagedObjectContext: 

es, de repente, volviendo una especie de extraña instancia de NSNumber. BGF dice que el objeto devuelto es de la subclase personalizada correcta de NSManagedObject, pero cuando voy a imprimir una descripción de la misma NSManagedObject, me sale el siguiente error:

*** -[NSCFNumber objectID]: unrecognized selector sent to instance 0x3f26f50 

Cuál es aún más extraño, es que soy capaz para establecer algunas relaciones y atributos usando setValue: forKey: y todo está bien. Pero cuando intento para establecer una relación específica, me sale este error:

*** -[NSCFNumber entity]: unrecognized selector sent to instance 0x3f26f50 

He intentado todo, desde limpiar todos los objetivos, para reiniciar Mac y iPhone, incluso la edición del modelo, de manera que la relación en cuestión es a uno en lugar de a muchos. No importa lo que haga, aparece el mismo problema. ¿Alguien ha visto algo como esto antes?

+2

Por favor, proporcionar más código – Skie

+0

¿Alguna vez terminan calcular esto? – makdad

Respuesta

0

Los selectores objectID y entity están en NSManagedObject, no en NSCFNumber (o NSNumber). No esperaría que llamara a ninguno de estos selectores en un NSNumber que debería ser una propiedad de una entidad, no la entidad misma.

Cada entidad en CoreData debe extenderse NSManagedObject, por lo que su objeto NSCFNumber no es una entidad.

1

Me encontré con exactamente el mismo problema y después de sacarme el pelo durante un día entero, resolví mi problema.

Creo que el problema está relacionado con un atributo/relación corrupto, y el NSCFNumber realmente está buscando el ID de objeto para ese atributo/relación. En mi caso, podría usar valueForKey: para encontrar todos los atributos/relaciones, aunque una relación que llamé "archivo" parecía estar dañada.

Finalmente me di cuenta de que había extendido NSObject para incluir un método booleano "isFile", y de alguna manera esto estaba interfiriendo con CoreData y haciendo que devolviera un objeto corrupto, o que no pudiera tratar adecuadamente el objeto que tenía . Mi suposición es que CoreData debe crear dinámicamente métodos "isXXX".

Podría solucionar el problema eliminando el método isFile o cambiando el nombre de mi propiedad.

14

Tuve el mismo problema: había agregado un método llamado "isDatabase" (devolviendo un BOOL) a la entidad padre de mi entidad de base de datos, que tenía una relación llamada "base de datos". Renombrar "isDatabase" a "isOfTypeDatabase" solucionó el problema. ¡Así que sigue buscando en entidades matrices!

+0

Acabas de guardarme potencialmente ** horas ** de frustración y Google. Si pudiera votar esta respuesta mil veces, lo haría. ¡Gracias Señor! – Russ

+0

¡OMG! Tuve el mismo problema, no puedo usar "is " incluso en una categoría. Renombrado mi método a otra cosa lo arregló! Muchas gracias: D! – KBog

2

Definí una propiedad en una subclase NSManagedObject que colisionó con el nombre de una relación definida en la clase.

Aquí está el código en mi MyManagedObjectSubclass+Custom.h

@property (readonly, nonatomic) BOOL isSeason;

Aquí está el código producido por XCode para MyManagedObjectSubclass.h

@property (nonatomic, retain) SomeOtherEntityToOneRelationship *season;

Tenga en cuenta que isSeason, por KVC, chocará con el nombre temporada