Ich bin neu in Core Data, und ich führe derzeit eine Anwendung mit Core Data.Kerndaten - Leichte Migration funktioniert nicht
In der Notwendigkeit, eine neue Version der Anwendung bald zu veröffentlichen, muss ich en Entity zum Datenmodell hinzufügen.
Ich habe dieses Tutorial Lightweight tutorial gefolgt, das sehr nützlich war, aber ich habe auch die ganze Apple Dokumentation aber auch diesen erstaunlichen Artikel Core Data Migration gelesen, um globaly zu verstehen, wie es funktioniert.
Obwohl ich dem Datenmodell nur eine Entität hinzufügen musste, habe ich gehört, dass eine Lightweight-Migration in dieser Situation in Ordnung war.
Es ist nur 1 neue Entity (ohne Attribute), die ich mit der bereits bestehenden Eltern Entity verknüpfen muss.
Was ich bisher getan haben:
- Die Anwendung ist derzeit auf der Version 3 des Datenmodells
- ich ein neues Datenmodell erstellt haben (Version 4) von der Version 3
- I habe das Datenmodell Version 4 als aktuelles Datenmodell ausgewählt
- Ich habe meine neue Entity (ohne Attribut) erstellt und mit der übergeordneten Entity verknüpft.
- Ich habe das generierte Klassenobjekt erstellt
- Dann modifiziert ich meine UI
erstellen und ausführen, funktioniert es, cool. ABER wenn ich die aktuelle Version vom AppStore herunterlade, und wenn ich das neue, kürzlich erstellte Archiv/IPA von TestFlight installiere, (installiere über das alte -> Migrationsszenario), starte die Anwendung ohne mein neues Entity/Datamodel.
Aus der Apple-Dokumentation geht hervor, dass das Hinzufügen von Entität von Core Dara für Lightweight Migration unterstützt wird.
Ich weiß, das ist kein einfacher Prozess, aber ich fühle mich wie ich alles perfekt verfolgt habe.
Wie kann ich ohne jedes Zeitarchiv die Migration testen, veröffentliche auf Testflug etc ...
Wenn Sie weitere Informationen benötigen, um zu verstehen, klar mein Problem und/oder eine aufwendigere Antwort schreiben, fühlen sich frei, im Kommentar zu fragen und ich werde meine Frage bearbeiten.
Vielen Dank im Voraus.
EDIT:
Hier sind der Code über den NSPersistentStoreCoordinator vom AppDelegate.
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
// The persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it.
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
// Create the coordinator and store
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSURL *storeURL = [self persistentStoreURL];
NSError *error = nil;
NSString *failureReason = @"There was an error creating or loading the application's saved data.";
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} error:&error]) {
// Report any error we got.
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[NSLocalizedDescriptionKey] = @"Failed to initialize the application's saved data";
dict[NSLocalizedFailureReasonErrorKey] = failureReason;
dict[NSUnderlyingErrorKey] = error;
error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
// Replace this 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.
DDLogError(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
Ich weiß nicht, wie kann ich durch Tests oder Protokolle effektiv weiß, dass Coredata das neue Datenmodell (Version 4) verwendet und hat die Migration erfolgreich durchgeführt.
Ich weiß, es funktioniert, wenn ich von xCode erstellen, aber es ist nicht die gleiche Situation als ein Update aus dem AppStore.
Ich habe meine Frage bearbeitet. – Balanced
Die Optionen werden bereits in der Anwendung verwendet. Die App funktioniert perfekt mit meiner neuen Funktion und dem neuen Datamodell. Bei der Installation über eine Anwendung mit dem vorherigen Datenmodell wird die Migration jedoch nicht ausgeführt. – Balanced
Versuchen Sie, der neuen Entität ein Attribut hinzuzufügen. Wenn bei der Migration ein Problem auftritt, erhalten Sie eine Fehlermeldung, und die App wird nicht ausgeführt, also nicht. Ich glaube, es löst die Migration nicht aus, da die Entität in gewisser Hinsicht "leer" erscheint. –