ios core-data restkit nsmanagedobjectcontext

iOS RestKit no puede guardar entidad local en la base de datos



core-data nsmanagedobjectcontext (1)

Estoy usando RestKit 0.20 para analizar datos JSON y guardarlos en la base de datos. Hay una entidad mapeada SchoolClass, que es manejada por RestKit y guarda bien. Tengo otra entidad llamada MyClass, que almacena las clases que he seleccionado. Este es solo local en el dispositivo.

Aquí está el código que creo y guardo la entidad MyClass

NSManagedObjectContext *managedObjCtx = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext; MyClass* course = [managedObjCtx insertNewObjectForEntityForName:@"MyClass"]; .. set the data for course here NSError *executeError = nil; if(![managedObjCtx save:&executeError]) { NSLog(@"Failed to save to data store"); }

Aquí está el código que inicializa el almacén de datos administrados

// Initialize managed object store NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel]; objectManager.managedObjectStore = managedObjectStore; /** Complete Core Data stack initialization */ [managedObjectStore createPersistentStoreCoordinator]; NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"RKMainDb.sqlite"]; NSString *seedPath = [[NSBundle mainBundle] pathForResource:@"RKSeedDatabase" ofType:@"sqlite"]; NSError *error; NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:seedPath withConfiguration:nil options:nil error:&error]; NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error); // Create the managed object contexts [managedObjectStore createManagedObjectContexts]; // Configure a managed object cache to ensure we do not create duplicate objects managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext];

Parece que el guardado fue exitoso y en MyClasseTableViewController pude leer las entradas de MyClass guardadas. Sin embargo, después de cerrar la aplicación y reiniciar de nuevo. MyClassTableViewController está vacío, porque los resultados obtenidos están vacíos. Abrí el archivo sqlite usando SQLiteBrowser y la tabla MyClass está vacía. Parece que las entidades MyClass solo se guardan en la memoria caché pero no en la tienda persistente. ¿Debo llamar a alguna API provista por RestKit para guardarla? Traté de leer el documento pero no pude encontrarlo. Por favor ayuda.


Gracias por el liderazgo de Tom, encontré que RestKit tiene NSManagedObjectContext (RKAdditions), que tiene un método:

- (BOOL)saveToPersistentStore:(NSError **)error

Sí, tiene lógica para manejar el contexto de objetos gestionados anidados. Aquí está el nuevo código que funciona, solo un cambio de línea, pero tomó mucho tiempo encontrar la llamada correcta :(

#import "NSManagedObjectContext+RKAdditions.h" NSManagedObjectContext *managedObjCtx = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext; MyClass* course = [managedObjCtx insertNewObjectForEntityForName:@"MyClass"]; .. set the data for course here NSError *executeError = nil; if(![managedObjCtx saveToPersistentStore:&executeError]) { NSLog(@"Failed to save to data store"); }