2010-11-03 4 views
2

J'ai une migration de base de données qui introduit 2 nouveaux types d'entité. La migration fonctionne sans problème, mais je veux remplir la base de données avec les données par défaut après la migration.Insertion de données après une migration de données de base

Actuellement, mon approche est de définir une coutume NSEntityMigrationPolicy et passer outre endEntityMapping: Responsable: Erreur:

- (BOOL)endEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error { 
if (![super endEntityMapping:mapping manager:manager error:error]) return NO; 
Theme *defaultTheme = [NSEntityDescription insertNewObjectForEntityForName:@"Theme" inManagedObjectContext:[manager destinationContext]]; 
[defaultTheme setName:NSLocalizedString(@"Default", @"Default theme name")]; 
return YES; 
} 
  1. Est-ce une bonne approche?
  2. Pourquoi ne pas appeler -awakeFromInsert de Theme?
+0

L'insert a-t-il fonctionné? Appelez-vous save explicitement? ou en s'appuyant sur le gestionnaire de migration pour le faire? –

+0

L'insertion fonctionne. Je n'appelle pas sauver. Je peux voir la rangée dans la base de données après avoir quitté. – fraserhess

Répondre

2

Oui, c'est une bonne approche; probablement la meilleure approche actuellement.

Le fichier -awakeFromInsert du Thème n'est pas appelé car vos sous-classes personnalisées ne sont pas utilisées pendant la migration. Le gestionnaire de migration effectue toutes les actions de migration avec NSManagedObject nu plutôt que d'utiliser des objets personnalisés.

De même, vous ne devez pas le déclarer comme Theme (l'appel -insertNewObjectForEntityForName: inManagedObjectContext: renvoie réellement un NSManagedObject de la vanille) dans cette méthode non plus. Cela mènera à la confusion lors de la maintenance du code.

Questions connexes