2010-05-22 4 views
0

J'ai un schéma assez simple. Essentiellement, exécuter < -> Données (où une exécution contient une donnée, par exemple, la température, échantillonnée à partir d'une sorte de capteur). Maintenant, il semble que les capteurs peuvent avoir plus d'une mesure (par exemple, la température et l'humidité). Ainsi, une seule exécution peut avoir plusieurs échantillons de données.Utilisation de modèles de mappage pour migrer entre des modèles d'objets de données principaux

Par conséquent, exécutez < - >> Échantillon et échantillon-> Données. Si je crée un nouveau modèle de mappage, les choses fonctionnent généralement, sauf qu'aucun nouvel échantillon n'est créé, aucune relation n'établie entre les deux. Courses et échantillons ni entre échantillons et données.

Je suis en train d'obtenir le modèle de cartographie pour migrer mon modèle, mais le moindre changement au modèle de cartographie généré des résultats en erreur Cocoa 134110.

Par exemple, si je prends la cartographie « Sample » (qui n'a pas Source) et définissez sa Source sur 'Run' (afin que je puisse définir la relation inverse de Sample 'run' de manière appropriée) puis le mapping change son nom en 'RunToSample'. Deux relations sont gérées dans ce mappage: données et exécution. La propriété de données se règle automatiquement à

FUNCTION($manager, "destinationInstancesForEntityMappingNamed:sourceInstances:" , "DataToData", $source.dataSet)

Suivant cet exemple, je mis la propriété de l'exécution pour

FUNCTION($manager, "destinationInstancesForEntityMappingNamed:sourceInstances:" , "RunToRun", $source)

De même, je mets la cartographie de propriété « échantillon » dans RunToRun à

FUNCTION($manager, "destinationInstancesForEntityMappingNamed:sourceInstances:" , "RunToSample", $source)

et la propriété 'sample' en DataToData à

FUNCTION($manager, "destinationInstancesForEntityMappingNamed:sourceInstances:" , "RunToSample", $source.run)

Alors, quoi, je me demande, ne va pas? J'ai essayé diverses permutations, telles que laisser les relations «inverses» non spécifiées. Mais je continue d'avoir la même erreur (134110) malgré tout. J'imagine que c'est beaucoup plus facile qu'il n'y paraît et qu'il me manque un morceau fondamental mais mineur. J'ai également essayé de sous-classer NSEntityMigrationPolicy et de surcharger -createDestinationInstancesForSourceInstance: mais ces efforts ont rencontré à peu près les mêmes résultats.

Merci d'avance pour tout pointeur ou conseil (pertinent :-). Edit: Pour simplifier, j'ai marqué toutes les relations comme optionnelles. Bien que, finalement, je puisse choisir autrement.

Répondre

1

En utilisant ce qui suit, j'ai pu obtenir une meilleure compréhension de ce qui se passait (et qui ne va pas):

 NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MyDataStore.sqlite"]]; 

    NSError *error = nil; 
    NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType 
                    URL:storeUrl 
                    error:&error]; 

    if (!sourceMetadata) 
     { 
     DLog(@"sourceMetadata is nil"); 
     } 
    else 
     { 
     DLog(@"sourceMetadata is %@", sourceMetadata); 
     } 

En outre, je devais commander soigneusement mes correspondances d'entité. Et, j'ai trouvé que - [NSMigrationManager destinationInstancesForEntityMappingNamed: sourceInstances:] était absolument nécessaire pour copier des 'relations'.Par exemple,

NSSet *runs = [source valueForKey:@"allRuns"]; 
for (Run *srcRun in runs) 
    { 
    NSArray *temp = [manager destinationInstancesForEntityMappingNamed:@"RunToRun" 
           sourceInstances:[NSArray arrayWithObject:srcRun]]; 
    if ([temp count]) 
     { 
     Run *dstRun = (Run*)[temp lastObject]; 
     [dest addAllRunsObject:dstRun]; 
     } 
    } 
+0

Hi! J'apprends à migrer. À quelle classe appartient le deuxième bloc de code (dans votre réponse)? Avez-vous sous-classe 'NS ... quelque chose? Comment spécifiez-vous le modèle de mappage pour utiliser cette sous-classe? Merci! – Colas

Questions connexes