CoreData Migration wie erkennen?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CoreData Migration wie erkennen?

    Guten Tag,

    zu meiner aktuellen Lage! Ich habe sog. Zähler in der Datenbank mit denen ich erkenne, ob Daten vom Server aktualisiert werden müssen.
    Jetzt möchte ich erkennen, wann ein Update der App und somit auch ein neues CoreData Model eingefügt wird, damit ich danach die Zähler zurücksetzen kann.
    Es sollen nach einem Update gewisse Daten neu geladen werden, da die neuen Felder befüllt werden sollen.
    Wie könnte ich so etwas umsetzen?

    Hier der Code:

    Quellcode

    1. - (NSPersistentStoreCoordinator *)persistentStoreCoordinator
    2. {
    3. if (_persistentStoreCoordinator != nil) {
    4. return _persistentStoreCoordinator;
    5. }
    6. NSURL *storeURL = [[self url_dokumentenpfad] URLByAppendingPathComponent:s_dbname];
    7. NSError *error = nil;
    8. NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
    9. [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
    10. [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    11. _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    12. if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
    13. {
    14. NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    15. abort();
    16. }
    17. return _persistentStoreCoordinator;
    18. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von kruemel1770 ()

  • Danke erst einmal für die Antwort. Ja das weiß ich.

    Hier ein Beispiel:

    Es gibt 1 Standort mit Öffnungszeiten.
    Nach dem Update gibt es noch ein Feld für Zusatztext, das aber leer ist, da der Standort schon importiert wurde.
    Damit die neuen Daten importiert werden können, muss der Zähler zurückgesetzt werden.
    Wo prüfe ich, ob ein Update des CoreData Modells erfolgt ist?
  • Du kannst

    Quellcode

    1. NSArray *storeVersions = [[NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:storeURL error:&error]
    2. objectForKey:NSStoreModelVersionIdentifiersKey];


    vor

    Quellcode

    1. [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]


    probieren, dann hast du die Versionen der Stores vor der Migration. Ich würde aber von so was abraten - du migrierst Daten von denen du selber sagst das sie nicht zu migrieren sind.

    Wie wäre es mit passenden Default-Werten oder einem Mapping Model (File > New File, Core Data > Mapping Model)?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von SteveJ ()

  • Du legst einfach ein NSUserDefault in dieser neuen Version Deiner App (!) an. Das fragst Du beim Start ab. Ist es noch leer (erster Start der neuen Version) setzt Du den Zähler zurück und ein Flag in diesem Userdefault. Ab dem 2. Start erkennt Deine App. anhand dieses Flags, dass bereits alles erledigt ist.