2010-11-17 2 views
0

J'utilise des données de base pour extraire des valeurs d'une base de données SQL pour mon application iPhone. Je suis assez nouveau à la syntaxe, donc je pourrais manquer quelques informations clés.Différence de données lors de l'utilisation de relations de données de base

Mon demande de récupération ressemble à ceci:

NSEntityDescription *difficultyDescription = [NSEntityDescription entityForName:@"Difficulty" inManagedObjectContext:managedObjectContext]; 
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 
[fetchRequest setEntity:difficultyDescription]; 
NSArray *diffResults = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

Après cela, je suis en boucle à travers les résultats en utilisant cet extrait:

systems = [[NSMutableArray alloc] init]; 
values = [[NSMutableArray alloc] init]; 
for (NSManagedObject *diff in diffResults) { 
[systems addObject:diff]; 

[values addObject:[diff valueForKey:@"difficultyValues"]]; 
} 

Ce que je ne comprends pas à ce sujet est, que lorsque je consignation des systèmes en utilisant

NSLog(@"%@", [[systems objectAtIndex:0] valueForKey:@"name"]); 

Je reçois le résultat en texte brut. Par exemple "une certaine valeur".

Lorsque vous vous connectez les résultats dans le tableau « valeurs » mais j'obtenir ce résultat:

{(
    "some value" 
)} 

J'utilise le même appel d'enregistrement:

NSLog(@"%@", [[values objectAtIndex:0] valueForKey:@"value"]); 

La difficulté et difficultyValues ​​entités ont une relation à plusieurs.

Comment puis-je afficher la valeur dans les "valeurs" du tableau comme celle dans "systèmes"? J'en ai besoin plus tard pour une étiquette.

Répondre

0

Cela semble être un malentendu fondamental. difficultyValues est une relation , tandis que le nom est un NSStringattribut. C'est pourquoi il apparaît différemment dans NSLog(), qui fonctionne en envoyant aux objets un message -description.

La valeur pour difficultyValues sera NSSet qui contient plusieurs objets gérés pour l'entité difficulty.

Voici ce que vous devez faire:

NSLog(@"%@", [[systems objectAtIndex:0] valueForKey:@"name"]); // NSString* 

// let's loop through all the difficulties of this item 
for (NSManagedObject* aDifficulty in [[[systems objectAtIndex:0] valueForKey:@"difficultyValues"] allObjects]) { 

    NSLog(@"%@", [aDifficulty valueForKey:@"name"]); 

} 

Ceci, bien sûr, en supposant que votre entité difficulty a un attribut name.

Questions connexes