2012-04-18 9 views
6

Ich habe ein (proably) einfach zu beheben Problem mit meinem persistenten Coredata-Speicher.Umbenennen von persistentstore Koordinator URL

Ich habe es mit:

- (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; 
} 

mit der URL dummyURL.sqlite

ich dies am ersten Tag mit dem Projekt arbeiten, und vergessen haben, es zu benennen .. jetzt alle meine aktuellen Testgeräte (4) waren in Verwendung für mehr als 2 Monate, mit der Anwendung, das Sammeln einer Menge von Daten und speichern Sie es mit einer dummen URL Ich habe einige Forschung über die Migration von persistenten Speichern und Diese Funktion hat geschrieben:

-(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]; 

} 

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

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

Antwort

3

ich es geschafft, es zu lösen mir die migratePersistentStore Funktion:

-(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]; 

} 

danach Ich habe gerade die appendURL zu database.sqli in meinem AppDelegate. funktioniert wie ein Charme :)

0

ich empfehlen würde einen zweiten permanenten Speicher mit der neuen URL zu schaffen und eine Schaltfläche irgendwo, dass Kopien Hinzufügen aller von die Daten, die Sie in die neue haben. Stellen Sie sicher, dass Sie testen, ob alle Ihre Daten im neuen permanenten Speicher vorhanden sind, bevor Sie den alten aus der App entfernen.

+0

danke für die schnelle Antwort. Ich bin ein bisschen zwielichtig auf dem persistentstore Konzept (deshalb habe ich es nicht mehr angefasst, nachdem ich es erstellt habe) ... Ich bin derzeit auf der Suche nach "migratePersistentStore", aber ich habe Angst, es wegen Dataloss zu versuchen ..:/ wo würde ich setzen ein Migrationscode? –