AVISO: Cualquier pregunta que no cumpla ninguno de estos criterios podrá ser borrada sin previo aviso.

Hola,

estoy haciendo una aplicación en la que utilizo dos NSManagedObjectContext diferentes con el mismo modelo. Uno debería ser persistente, y otro no persistente, es decir, que al cerrar la aplicación la información contenida por el "se pierda".

Para ello tengo definidos los siguientes métodos en el AppDelegate:

    - (NSManagedObjectContext *)managedObjectContext //PERSISTENTE
{
    if (__managedObjectContext != nil)
    {
        return __managedObjectContext;
    }
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil)
    {
        __managedObjectContext = [[NSManagedObjectContext alloc] init];
        [__managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return __managedObjectContext;
}

- (NSManagedObjectContext *)notPersistentContext //NO PERSISTENTE
{
    if (__notPersistentContext != nil)
    {
        return __notPersistentContext;
    }    
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil)
    {
        __notPersistentContext = [[NSManagedObjectContext alloc] init];
        [__notPersistentContext setPersistentStoreCoordinator:coordinator];
    }
    return __notPersistentContext;
}

- (void)saveContext
{
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
    if (managedObjectContext != nil)
    {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
        {
            /*
             Replace this implementation with code to handle the error appropriately.

             abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
             */
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        } 
    }

    [[NSUserDefaults standardUserDefaults] synchronize];

}

A parte de los metodos standar del persistentStoreCoordinator y managedObjectModel.

Lo que pienso que deberia ocurrir es que al no ejecutar el contexto no persistente el método save: los datos de este contexto no se guarden. Sin embargo no es así, y los datos si que son guardados.

¿Que puedo hacer para que los datos de este contexto no sean permanentes?

preguntado 08 Mar '12, 18:16

ManueGE's gravatar image

ManueGE
3.1k284260

Tienes razón, @LightMan, no se porque no cree 2 persistentStoreCoordinator. Me parece que es porque leí que no era recomedable (claro, que tambien lei que no era recomendable crear dos contextos). Si la pones como respuesta te la acepto.

(10 Mar '12, 11:50) ManueGE

No soy un experto en core data, pero aquí falta el código de creación del persistentStoreCoordinator. Cuando se crea se define si quieres que sea un almacén en memoria, en Sqlite, en xml o en binario. Al final vas a tener un sitio donde se guardan los datos. Si los dos coordinadores apuntan al mismo sitio te los grabarán igual, a parte que no veo ninguna diferencia en la creación de los dos persistentStoreCoordinator.

enlace permanente

respondido 10 Mar '12, 11:51

LightMan's gravatar image

LightMan
1.7k4617

Tu respuesta:
Activar/desactivar vista previa