コアデータ内のエンティティ間の属性の計算を実行する

私はxcode/iosなどに新しいです...そして問題を見つけ出すのに少し問題があります。コアデータのエンティティ間で属性を取得して計算する方法を理解できないようです。ここに私がしようとしていることの例があります:

私のプロジェクトは、1対多数の関係を持つサッカーアプリです。シーズンにゲーム(シーズンにはゲームの束があります。シーズンにはチームネームやタイムスタートのような属性があります。ゲームにはパッシングヤード、ランニングヤードなどの属性があります。

シーズン中の合計パッシングヤードのようなものを計算するにはどうしたらいいでしょうか?

御時間ありがとうございます。

4

2 答え

シーズンの管理オブジェクトには、 hasGames という名前の関係(またはゲームに関係の名前を付けたもの)があります。シーズン管理対象オブジェクトを持っている場合は、 hasGames の関係( NSSet )にアクセスし、そこにあるすべてのゲームをループして、 、例えばいくつかの値を追加します。

EDIT:

例:

If I take your Relationships Career -> Season -> Game, and suppose the relationships are called Career.hasSeasons and Season.hasGames, it would look something like this

int passingYards = 0;

Career* myCareer = [... fetchedresult for the career you are looking for ...];

for(Season* season in myCareer.hasSeasons)
{
  for(Game* game in season.hasGames)
  {
    careerPassingYards += [game.passingYards intValue];
  }
}
1
追加された
正直なところ、私は分かりません - 少なくとも小規模なデータセットの場合はどちらでも大丈夫でしょう。おそらく大規模なデータセットの場合はクエリのみのアプローチがより効果的です。そして私は、私が記述したような関係にアクセスすることの記述力が好きです - それは管理されたオブジェクトの大きな特徴だと思います。
追加された 著者 TheEye,
上記のあなたの提案のコード例を私に与えることができますか?私は非常に素晴らしいでしょう。これは私が以下に掲示した方法よりも良いでしょうか?私はこのようなことにもう一度感謝しています。
追加された 著者 TouchMint,
これは本当にありがとう!!!!!!ありがとう!私は、このループ処理を幾分実行するサブクエリーを持つ述語を作成しようとしていました。これは、渡したり、やりとりしたり、タックルしたりするためのこのプロセスを繰り返すことになるでしょう...どちらが良い方法でしょうか?私は間違っています。私は非常に感謝しています。私はちょうど私が非常に多くのxcode /
追加された 著者 TouchMint,
もう一度お試しいただきありがとうございます。あなたの提案したような1つのビューと、以下のような1つのビューを実行し、パフォーマンスがどのようになるかを見ていきます。私のマックでは、彼らは同じように見えるので、私たちが働いているような小さなセットでは本当に問題ではないとあなたは思っています。とにかく再びありがとう!
追加された 著者 TouchMint,

私はスタック上でこのコードを見つけることになった。 私のfetchedResultsControllerを適切に設定した後、私はこのコードをボタンで使用することができました。または、私の季節のすべてのゲームの合計パッシングヤードを計算する必要があった場所です。

int totalpassingyards = 0;
for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects]) {
    NSNumber *objectTotalPassingYardsNumber = [object valueForKey:@"passingyards"];
    int objectTotalPassingYards = [objectTotalPassingYardsNumber intValue];      
    totalpassingyards = totalpassingyards + objectTotalPassingYards;
}
NSLog(@"Subtotal: %i", totalpassingyards);

私の次のステップは、キャリアリストのすべての季節の合計パッシングヤードを計算する方法を理解することです。私のcoredataの関係がどのように設定されているかは次のとおりです。

Career          >       Season      >       Game
(career stats)          (season stats)      (game stats)

career stats = sum of season stats
season stats = sum of game stats
game stats = that individual games stats

私は、これは、ゲームを持っている2つのfetchedResultsControllerを作成することと、シーズンを保持し、すべてのものを得るためにいくつかのタイプの入れ子になったループを作成することで構成されると推測しています。私は皆を更新していきます。

誰かがこれを行うためのより良い方法を持っている場合、私はこれは非常に新しいので、すべてが実際にトレイルとエラーに来ると言ったように私に知らせてくださいと私はそれが笑を行うための最良の方法ではないかもしれないことを理解することがあります。

0
追加された