我是核心数据的新手,并且仍在努力解决它。我有一个问题,我花了几个小时试图解决。我似乎无法解决它,并希望有人可以帮助我。
我还不能发布图片,所以这里是我的数据模型的链接:
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 db 时,数据就在那里。我的问题是试图检索属于每个时期的球员。因为 Periods 是 Games 中的一个集合,而 Players 是核心数据中 Periods 中的一个集合。所以我无法通过以下方式检索玩家: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];
我不知道如何从这里开始取回玩家。我知道如何检索属于每个游戏的时段,但我不知道如何检索属于某个时段的玩家。几天来我一直在尝试解决这个问题,但它不起作用。
我的数据模型正确吗?我应该如何检索数据?任何帮助或建议表示赞赏。