Я новичок в основных данных и все еще пытаюсь понять это. У меня есть проблема, на решение которой я потратил несколько часов. Я просто не могу решить это и надеялся, что кто-то может мне помочь.
Я пока не могу публиковать изображения, поэтому вот ссылка на мою модель данных:
http://yourpcsolution.net/model.png
Каждое отношение имеет обратное. В игре может быть много периодов, а в периоде может быть много игроков. Игрок может находиться более чем в одном Периоде.
Вот мой код для заполнения БД:
- (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]);
}
}
Я думаю, что это правильный способ добавления данных, потому что при просмотре базы данных sql данные есть. Моя проблема заключается в попытке найти игроков, принадлежащих к каждому периоду. Поскольку периоды — это набор в играх, а игроки — это набор в периодах в основных данных. Поэтому я не могу получить игроков, перейдя: game.periods.players
Вот мой код для получения периода, и в журнале xcode я получаю сообщение об ошибке:
"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})"
Мой код для получения периода:
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];
Я не уверен, как действовать дальше, чтобы получить игроков. Я знаю, как получить, какие периоды принадлежат каждой игре, но я не знаю, как получить игроков, принадлежащих периоду. Я пытался в течение нескольких дней, чтобы понять это, и это просто не работает.
Верна ли моя модель данных? Как я должен получать данные? Любая помощь или совет приветствуются.