Par le passé, j'avais déjà implémenté la migration automatique de la version 1 de mon modèle de données vers la version 2. Maintenant, à l'aide du SDK 3.1.3, migration de la version 2 à la version 3 échoue avec l'erreur suivante: "l'opération n'a pas pu être terminée (erreur Cocoa 134110.)"Échec de la migration de données avec erreur: Échec d'enregistrement du nouveau magasin après la première phase de migration
erreur non résolue erreur domaine = NSCocoaErrorDomain code = 134110 UserInfo = 0x5363360, { NSUnderlyingError = erreur de domaine = NSCocoaErrorDomain Code = 256 UserInfo = 0x53622b0 "L'opération n'a pas pu être terminée. (Erreur cacao 256.)"; reason = "Impossible d'enregistrer le nouveau magasin après le premier passage de la migration."; }
J'ai essayé la migration automatique à l'aide NSMigratePersistentStoresAutomaticallyOption
et NSInferMappingModelAutomaticallyOption
ainsi que la migration en utilisant uniquement NSMigratePersistentStoresAutomaticallyOption
, fournissant un modèle de cartographie de v2 à v3. Je vois l'erreur ci-dessus enregistrée, et aucun objet n'est disponible dans l'application. Cependant, si je quitte l'application et la rouvre, tout est en place et fonctionne.
La base de données des méthodes que je utilise sont les suivantes
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"MYAPP" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
- (NSManagedObjectContext *) managedObjectContext {
if (managedObjectContext != nil) {
return managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return managedObjectContext;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MYAPP.sqlite"]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
// Handle error
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
return persistentStoreCoordinator;
}
Dans le simulateur, je vois que cela génère un MYAPP ~ fichiers .sqlite et un fichier MYAPP.sqlite. J'ai essayé d'enlever le fichier MYAPP ~ .sqlite, mais
BOOL oldExists = [[NSFileManager defaultManager] fileExistsAtPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MYAPP~.sqlite"]];
renvoie toujours NON. Une idée? Est-ce que je fais quelque chose de mal? Merci d'avance.
Avez-vous déjà résolu cela? Je vois maintenant exactement le même problème, erreur 134110, c'est-à-dire qu'au premier lancement, il ne se charge pas correctement et lors des lancements ultérieurs, il ne le fait que sur 3.1.3. Très mauvaise expérience utilisateur pour le client – coneybeare