Je suis nouveau pour les données de base et je suis toujours en train d'essayer de comprendre. J'ai un problème que j'ai passé des heures à essayer de résoudre. Je n'arrive pas à le résoudre et espérais que quelqu'un puisse m'aider.données de base récupérant des données à partir de jeux avec plusieurs à plusieurs relations
Je ne peux pas poster des images pourtant si ici est un lien vers mon modèle de données:
http://yourpcsolution.net/model.png
Chaque relation a une inverse. Un jeu peut avoir plusieurs périodes et une période peut avoir plusieurs joueurs. Un joueur peut être dans plus d'une période.
Voici mon code pour peuplant DB:
- (void) prepareDB {
Games *game = [NSEntityDescription insertNewObjectForEntityForName:@"Games" inManagedObjectContext:self.managedObjectContext];
game.date = [NSDate date];
game.name = @"Game 1";
Periods *period = [NSEntityDescription insertNewObjectForEntityForName:@"Periods" inManagedObjectContext:self.managedObjectContext];
period.date = [NSDate date];
period.name = @"1st Period";
NSMutableSet *gameSet = [[NSMutableSet alloc] initWithObjects:period, nil];
game.periods = gameSet;
Players *player = [NSEntityDescription insertNewObjectForEntityForName:@"Players" inManagedObjectContext:self.managedObjectContext];
player.name = @"Player1";
NSMutableSet *playerSet = [[NSMutableSet alloc] initWithObjects:player, nil];
period.players = playerSet;
NSError *error;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
}
Je pense que c'est la bonne façon d'ajouter des données parce que quand on regarde à la base de données SQL les données sont là. Mon problème est d'essayer de récupérer les joueurs qui appartiennent à chaque période. Parce que Périodes est un ensemble dans Jeux et Joueurs est un ensemble de Périodes dans les données de base. Je ne peux pas récupérer les joueurs en allant: game.periods.players
Voici mon code pour récupérer une période et dans le journal de Xcode je reçois une erreur:
"Relationship 'players' fault on managed object (0x8e72bc0) <Periods: 0x8e72bc0>
(entity: Periods; id: 0x8e727c0 <x-coredata://7F63902B-FCB6-4ACA-BB40-904755D37A4A/Periods/p1>;
data: {\n date = \"2013-07-09 19:35:48 +0000\";\n
games = \"0x8e6d760 <x-coredata://7F63902B-FCB6-4ACA-BB40-904755D37A4A/Games/p1>\";\n
name = \"1st Period\";\n players = \"<relationship fault: 0x9840330 'players'>\";\n})"
Mon code pour récupérer un Période:
NSString *firstPeriod = @"1st Period";
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", firstPeriod];
[request setEntity:[NSEntityDescription entityForName:@"Periods" inManagedObjectContext:self.managedObjectContext]];
[request setPredicate:predicate];
NSArray *period = [self.managedObjectContext executeFetchRequest:request error:&error];
Je ne sais pas comment procéder à partir d'ici pour récupérer les joueurs. Je sais comment récupérer quelles périodes appartiennent à chaque jeu mais je ne sais pas comment récupérer les joueurs qui appartiennent à une période. J'essaye depuis des jours de comprendre cela et ça ne marche pas.
Mon modèle de données est-il correct? Comment devrais-je récupérer les données? Toute aide ou conseil est apprécié.
J'ai utilisé un NSMutableSet pour que je puisse y ajouter des joueurs alors j'assigne ceci à l'ensemble game.periods. Savez-vous pourquoi je reçois le message d'erreur en essayant de récupérer une période ?? – TazmanNZL
Existe-t-il un moyen facile de retourner un tableau des périodes auxquelles un joueur appartient. Par exemple, si Player1 était dans 3 périodes différentes, comment est-ce que j'écrirais la demande d'extraction pour ceci? – TazmanNZL
1) Un "défaut" est juste un objet réservé (et non une erreur). Les propriétés sont récupérées automatiquement lorsque vous y accédez. Les défauts sont documentés dans le Guide de programmation des données de base. - 2) Voir la mise à jour de la réponse. - J'espère que cela pourra aider! –