私はコアデータに不慣れで、まだ頭を悩ませようとしています。解決しようと何時間も費やした問題があります。私はそれを解決できないようで、誰かが私を助けてくれることを望んでいました.
まだ画像を投稿できないので、ここに私のデータ モデルへのリンクを示します。
http://yourpcsolution.net/model.png
それぞれの関係には逆があります。ゲームは多くの期間を持つことができ、期間は多くのプレーヤーを持つことができます。プレーヤーは複数の期間に参加できます。
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]);
}
}
SQL dbを見るとデータがそこにあるので、それがデータを追加する正しい方法だと思います。私の問題は、各期間に属するプレーヤーを取得しようとすることです。Periods は Games のセットであり、Players は Core Data の 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];
ここからプレイヤーを取得する方法がわかりません。各ゲームに属するピリオドを取得する方法は知っていますが、ピリオドに属するプレーヤーを取得する方法はわかりません。私はこれを理解しようと何日も試みてきましたが、うまくいきません。
私のデータモデルは正しいですか? どのようにデータを取得すればよいですか? ヘルプやアドバイスをいただければ幸いです。