Requête CoreData

gibet_bgibet_b Membre
Bonjour à  tous,

J'aimerai bien faire des requêtes SQL dans CoreData parce que la manière de retourner des résultats me semble bien obscur (si vous avez un tuto sur point là  en particulier de CoreData, je suis preneur).

Voici mon problème :

J'ai une base CoreData avec deux entités : Players et Results. Les propriétés intéressante ici de Player sont :
- ratingTypePlayer qui est un String.
- resultsPlayer qui est une relation To-Many vers Result et dont la relation inverse est playerResult.

Je voudrais avoir un NSArray avec tous les résultats des joueurs dont ratingTypePlayer est égal à  "toto". Je n'arrive pas à  trouver des exemples de ce type sur le net.

D'avance merci,

Réponses

  • gibet_bgibet_b Membre
    01:38 modifié #2
    J'ai trouvé une méthode qui fonctionne (est-ce la meilleure ? mystère) :

    NSArray *players;<br />NSFetchRequest * allResults = [[NSFetchRequest alloc] init];<br />MyAppDelegate *app = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];<br />[allResults setEntity:[NSEntityDescription entityForName:@&quot;Player&quot; inManagedObjectContext:app.managedObjectContext]];<br />[allResults setPredicate:[NSPredicate predicateWithFormat:@&quot;ratingTypePlayer == %@&quot;, @&quot;FIDE&quot;]];<br />players = [app.managedObjectContext executeFetchRequest:allResults error:&amp;error];<br />[allResults release];<br />NSArray * playersResult = [players valueForKey:@&quot;resultsPlayer&quot;];<br />for (NSArray * aPlayersResult in playersResult) {<br />	for (NSManagedObject * aResult in aPlayersResult) { <br />		[app.managedObjectContext deleteObject:aResult];<br />	}<br />}
    


    En fait [players valueForKey:@resultsPlayer] renvoie un NSArray (par joueur) de NSArray (des résultats du joueur), c'est pour cela que je parcours le tout pour tout effacer. Si vous avez quelque chose à  redire à  mon code, n'hésitez pas.
  • MickMick Membre
    01:38 modifié #3
    Bonjour,

    d'après ce que je comprends, tu ne recherche pas des Players, mais des playerResults. Donc dans ta fetchRequest, il faut :
    <br />NSFetchRequest *request=[[NSFetchRequest alloc] init];<br />[request setEntity:[NSEntityDescription entityForName:@&quot;PlayerResult&quot; inManagedObjectContext:tonMoc]];<br />[request setPredicate:[NSPredicate predicateWithFormat:@&quot;thePlayer.ratingTypePlayer==%@&quot;,@&quot;toto&quot;]];<br />[tonMoc executeFetchRequest:request error:&amp;error];<br />[request release];<br />
    
    ;

    Tu as donc un array contenant tous les résultats obtenus par des joueurs ayant le ratingTypePlayer égal à  toto.
    Après je n'ai peut-être pas compris ton objectif.

    PS : le nom de ta relation inverse est bizarre : celle-ci pointe vers un Player, son nom logique serait donc "thePlayer" ou un truc du genre, ce que j'ai fais dans le code ci-dessus.
  • gibet_bgibet_b Membre
    01:38 modifié #4
    Non, ce que je cherche, ce sont des Results. Il n'y a pas d'entités PlayerResult. playerResult, c'est le nom de la relation inverse (à  resultsPlayer) définit dans Result.

    Merci néanmoins de ta participation.
  • MickMick Membre
    01:38 modifié #5
    oui, excuse j'ai été vite 
    <br />[request setEntity:[NSEntityDescription entityForName:@&quot;PlayerResult&quot; inManagedObjectContext:tonMoc]];<br />
    

    qui doit être en fait
    <br />[request setEntity:[NSEntityDescription entityForName:@&quot;Result&quot; inManagedObjectContext:tonMoc]];<br />
    


    Mais si c'est bien les Result que tu cherches, il faut bien mettre cette entité dans la request ! pourquoi as-tu mis Player pour entité dans ta requête ? je ne comprends pas.
Connectez-vous ou Inscrivez-vous pour répondre.