2010-10-21 4 views
1

Je travaille avec un projet Core Data dans iOS 4.1 (ciblage 3.1). Lorsque j'ajoute une version de modèle de données, j'obtiens l'erreur redoutable "Impossible de fusionner des modèles avec deux entités différentes nommées xxx". "Le nettoyage des cibles ne permet pas de supprimer le répertoire de construction, la seule chose qui résout le problème est la suppression la version précédemment installée de l'application et l'installation de fresh, ce qui va à l'encontre du but de la gestion des versions et de la migration des données:Impossible de résoudre "Impossible de fusionner des modèles avec deux entités différentes nommées"

J'ai un autre projet qui utilise ce processus avec succès et partage les mêmes bibliothèques de code que j'ai assemblées Je ne peux pas comprendre ce qui pourrait être suspendu à un projet

J'ai basé mon code de base de données, la réponse de Grouchal sur ce link text et le link text de Jeff Lamarche. ainsi que d'autres, des articles similaires sur le net. La plupart des personnes ayant ce problème semblent avoir eu de la chance avec "Clean All Targets". Mais je pars.

Des suggestions?

Répondre

0

J'ai découvert qu'une bibliothèque tierce que j'utilisais créait son propre magasin de données CoreData et utilisait la méthode de fusion des modèles ou la gestion des modèles de données. J'ai contacté le vendeur et la situation a été corrigée.

+0

Quelle était la bibliothèque 3ème partie? J'ai aussi ce problème. – benvolioT

2

Pour ceux qui viennent à travers cette question après avoir essayé d'utiliser les données fondamentales des migrations légères:

J'avais cette question, même après avoir suivi les instructions pour la création d'une nouvelle version de mon modèle de données. J'ai remarqué qu'il y avait deux fichiers ".mom" dans mon paquet d'application, un ".mom" et un répertoire ".momd" qui contenait des fichiers ".mom". Sur cette base, j'ai pu trouver this excellent post expliquant le problème et offrant une solution.

La clé est de remplacer la mise en œuvre de - (NSManagedObjectModel *)managedObjectModel qui est généré pour vous avec cette mise en œuvre:

- (NSManagedObjectModel *)managedObjectModel { 

    if (managedObjectModel != nil) { 
     return managedObjectModel; 
    } 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Foo" ofType:@"momd"]; 
    NSURL *momURL = [NSURL fileURLWithPath:path]; 
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; 

    return managedObjectModel; } 

où « Foo » est le nom de votre modèle de données. J'espère que cela sera utile à quelqu'un - j'ai passé trop de temps à me battre la tête contre le mur à ce sujet. Merci encore, Apple! :)

1

Voici ma solution

((RootViewController *) [self.tabBarController.viewControllers objectAtIndex:0]).managedObjectContext = self.managedObjectContext; 
((AlbumViewController *) [self.tabBarController.viewControllers objectAtIndex:1]).managedObjectContext = self.managedObjectContext; 
((CameraViewController *) [self.tabBarController.viewControllers objectAtIndex:2]).managedObjectContext = self.managedObjectContext; 
((VideoViewController *) [self.tabBarController.viewControllers objectAtIndex:3]).managedObjectContext = self.managedObjectContext; 
Questions connexes