私はコアデータを使用していますが、一般的には、ゲーム、ゲームフェーズを持ち、さまざまな種類のアクションに対して点数を付けました(pointsA、pointsBと言うことができます)。コアデータの結果をグループ化する
各ゲームは2つのフェーズで構成されているため、1プレイヤーごとにゲームごとに合計ポイントが得られます。(フェーズ1 +フェーズ2)
マイ コアデータにエンティティをスコアすることがあります。- プレーヤー(プレイヤーとの関係)、
- ゲーム(リレーションシップゲームへ)、
- フェーズ(属性) 、
- 点A(属性)、
- ポイントB(属性)。
各プレイヤーはゲームのフェーズでスコアの記録を持っています。
与えられたプレーヤーのすべてのポイントを取得するにはゲームによって集計されます( "Group By"に相当するSQL)。私はこのコードを使用して管理し、ITは WORKS:
CODE:
NSError *error;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:@"Score" inManagedObjectContext:self.managedObjectContext];
fetchRequest.predicate=[NSPredicate predicateWithFormat:@"player == %@",_currentPlayer];
NSExpressionDescription* ex = [[NSExpressionDescription alloc] init];
[ex setExpression:[NSExpression expressionWithFormat:@"@sum.pointsA"]];
[ex setExpressionResultType:NSDecimalAttributeType];
[ex setName:@"pointsA"];
NSExpressionDescription* ex2 = [[NSExpressionDescription alloc] init];
[ex2 setExpression:[NSExpression expressionWithFormat:@"@sum.pointsB"]];
[ex2 setExpressionResultType:NSDecimalAttributeType];
[ex2 setName:@"pointsB"];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"Game",ex, ex2,nil]];
[fetchRequest setPropertiesToGroupBy:[NSArray arrayWithObjects:@"Game",nil]];
[fetchRequest setResultType:NSDictionaryResultType ];
results= [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
私の質問です:私はpointsC、PointsDのように、MANY MORE POINTSタイプを持っていると仮定(他にもいろいろな種類の行動のスコアを挙げましょう)。これらのすべてについて、の別名NSExpressionDescription
(上記とex2)を使用する必要がありますか?
これは本当にそれがコアデータにどれくらい巻き込まれていますか?より速い方法がありますか?
私はコアデータに比較的新しいです。結果セットを解析する方法を不思議に思っている人のために
:
for (id Res in results) {
NSLog(@"pointsA: %@ ", Res[@"pointsA"]);
NSLog(@"pointsB: %@ ", [Res valueForKey:@"pointsB"]);
//both work
}