2012-04-18 14 views
6

Tengo un problema (probly) fácil de arreglar con mi tienda persistente de datos base.cambiar el nombre del coordinador de persistentstore URL

lo creé con:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 

    if (persistentStoreCoordinator != nil) 
    { 
     return persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"dummyURL.sqlite"]; 

    NSError *error = nil; 
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) 
    { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 

    return persistentStoreCoordinator; 
} 

usando la url dummyURL.sqlite

lo hice en el primer día de trabajo con el proyecto, y se han olvidado de cambiar su nombre .. ahora todos mis dispositivos de prueba actuales (4) estaban en uso durante más de 2 meses, el uso de la aplicación, recogiendo una gran cantidad de datos y su almacenamiento con una url estúpida ^^

ACTUALIZACIÓN hice algunas investigaciones sobre la migración de las tiendas y persistentes escribió esta función:

-(void)migrate{ 

    NSPersistentStoreCoordinator *psc = [self.dataHandler.managedObjectContext persistentStoreCoordinator]; 
    NSURL *oldURL = [psc URLForPersistentStore:[[psc persistentStores]objectAtIndex:0]]; 

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    NSURL *newURL = [[appDelegate applicationDocumentsDirectory] URLByAppendingPathComponent:@"database.sqlite"]; 

    NSError *error = nil; 

    NSPersistentStore *oldStore = [psc persistentStoreForURL:oldURL]; 
    NSPersistentStore *newStore = [psc migratePersistentStore:sqliStoreOld 
                  toURL:newURL 
                 options:nil 
                 withType:NSSQLiteStoreType 
                 error:&error]; 

} 

PREGUNTA 1will this work or will i lose some data with that?

PREGUNTA 2afterwards will i just have to change the appendString in my persistenstore function?

Respuesta

3

i logrado resolver yo mismo usando la función migratePersistentStore:

-(void)migrate{ 

    NSPersistentStoreCoordinator *psc = [self.dataHandler.managedObjectContext persistentStoreCoordinator]; 
    NSURL *oldURL = [psc URLForPersistentStore:[[psc persistentStores]objectAtIndex:0]]; 

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    NSURL *newURL = [[appDelegate applicationDocumentsDirectory] URLByAppendingPathComponent:@"database.sqlite"]; 

    NSError *error = nil; 

    NSPersistentStore *oldStore = [psc persistentStoreForURL:oldURL]; 
    NSPersistentStore *newStore = [psc migratePersistentStore:sqliStoreOld 
                  toURL:newURL 
                 options:nil 
                 withType:NSSQLiteStoreType 
                 error:&error]; 

} 

después acabo de cambiar el appendURL a database.sqli en mi AppDelegate. funciona como un encanto :)

0

recomendaría la creación de un segundo almacén permanente con la nueva URL y la adición de un botón en alguna parte que copia todos los datos que tiene en el nuevo. Asegúrese de probar para asegurarse de que todos sus datos estén en la nueva tienda persistente antes de eliminar el anterior de la aplicación.

+0

gracias por la respuesta rápida. Tengo un poco de sombra en el concepto persistentstore (es por eso que no lo toqué más después de crearlo) ... Actualmente estoy explorando 'migratePersistentStore', pero tengo miedo de probarlo debido a dataloss ..:/ donde pondría un código de migración? –

Cuestiones relacionadas