Tipos de punteros incompatibles asignados a 'NSManagedObject Subclass *' from 'NSEntityDescription *'

Estoy guardando el contexto del objeto administrado y estoy usando lo siguiente para hacerlo:

trainingDayObject = [NSEntityDescription entityForName:@"trainingDay" inManagedObjectContext:self.context];

Funciona, todo parece genial, pero recibo la advertencia:

Incompatible pointer types assigning to 'VitTrainingDay *' from 'NSEntityDescription *'

VitTrainingDay is an NSManagedObject Subclass of the Core Data entity TrainingDay. trainingDayObject is an instance of VitTrainingDay

Intenté leer los documentos en NSEntityDescription , pero dado que estoy asignando una entidad, estoy confundido sobre cuál es el problema.

Soy bastante nuevo en los datos centrales y Objective-C, así que perdónenme si esto es realmente obvio. Me ha estado molestando por unos días.

0

1 Respuestas

Cuando haces esto:

[NSEntityDescription entityForName:@"trainingDay" inManagedObjectContext:self.context];

Lo que obtienes es una instancia de NSEntityDescription . Este es un objeto que es equivalente al tipo de entidad que configuró en el editor de modelos de Core Data en Xcode. Representa una entidad tipo , no una instancia de esa entidad.

Del mensaje de error aparece que trainingDayObject se declara como VitTrainingDay * , que es un puntero a una instancia de un objeto gestionado.

La diferencia aquí es exactamente la misma idea que la diferencia entre una clase y una instancia de una clase. Es como si intentaras asignar la clase NSString a algo que se supone que es una instancia específica de una cadena.

Lo que realmente quieres es algo así como

trainingDayObject = [NSEntityDescription insertNewObjectForEntityForName:@"trainingDay" inManagedObjectContext:self.context];

Debido a que este método crea una nueva instancia del tipo de entidad, en lugar de solo darle el objeto de tipo de entidad en sí.

0
agregado
Si uso insertNewObjectForEntityForName , termino creando objetos en blanco además de guardar el MOC de los otros objetos creados. Por ejemplo, en mi vista de tabla obtengo nil, nil, Name 1, Name 2, en lugar del Name1 esperado, Name 2.
agregado el autor Arel, fuente
Pensé que era un problema más simple y no quería complicar demasiado la pregunta. Aquí está mi otra pregunta con contexto: stackoverflow.com/questions/20589938/…
agregado el autor Arel, fuente
Luego, haga otra pregunta que proporcione más detalles sobre lo que está haciendo. Por ejemplo, lo que intenta hacer cuando utiliza la línea de código en su pregunta anterior. Con solo una línea, es imposible dar una respuesta que refleje el contexto de la estructura general de su aplicación. Lo que sí puedo hacer es explicar qué pasa con esa línea.
agregado el autor Tom Harrington, fuente