insertNewObjectForEntityForName:

Configuré una Entidad usando el editor de archivos Xcode .xcdatamodel. Creé una entidad llamada Person, agregué algunos atributos y luego genere un archivo .m para representarlo. Eso todo funciona bien.

Ahora cuando voy a escribir una línea de código como:

   Persona * persona = (Persona *) [NSEntityDescription
                         insertNewObjectForEntityForName: @ "Persona"
                         inManagedObjectContext: managedObjectContext];

Y entiendo:

Finalización de la aplicación debido a la excepción no detectada ‘NSInternalInconsistencyException’, razón: ‘+ entityForName: no se pudo ubicar un NSManagedObjectModel para el nombre de la entidad’ Persona ”

Seguí el ejemplo de Location exactamente, paso a paso, creo, pero creo que me he perdido un paso crucial de “registro” en el que le digo a Xcode que mi entidad Person debería estar accesible. También no tenía una forma de “inicializar” el managedObjectContext, el ejemplo de Location tampoco parece hacer eso.

El hecho de que no haya configurado el MOC es casi seguro que es el problema. Más específicamente, significa que probablemente no estés cargando tu MOM (Modelo de Objetos Administrados) que define Persona. En algún lugar de tu código deberías tener algo como esto:

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; 

Y algo como esto:

 persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 

Y algo como esto:

 NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; if (coordinator != nil) { managedObjectContext = [[NSManagedObjectContext alloc] init]; [managedObjectContext setPersistentStoreCoordinator: coordinator]; 

Solo estoy copiando líneas de la plantilla AppDelegate de Core Data (lo que obtienes si creas una nueva aplicación que usa Core Data).

Si tiene todo eso, asegúrese de que su modelo de xcdata esté en la lista en el paso Comstackr fonts de la comstackción. Y, por supuesto, asegúrese de que esa persona sea realmente el nombre de la entidad en su modelo xcdata. El nombre de la entidad no es lo mismo que Clase, aunque a menudo se establece que sean los mismos.

Necesitas el init de los datos centrales

 -(void)initCoreData{ NSError *error; //Path to sqlite file. NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents/Level4.sqlite"]; NSURL *url = [NSURL fileURLWithPath:path]; //init the model NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; //Establish the persistent store coordinator NSPersistentStoreCoordinator *persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel]; if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]){ NSLog(@"Error %@",[error localizedDescription]); }else{ self.context = [[[NSManagedObjectContext alloc ] init ] autorelease]; [self.context setPersistentStoreCoordinator:persistentStoreCoordinator]; } [persistentStoreCoordinator release]; } 

Debería verificar si el objeto NSManagedObjectContext es nulo.

p.ej

 if (self.managedObjectContext == nil) { NSLog(@"NSManagedObjectContext is nil"); return nil; }