对核心数据中的实体之间的属性执行计算

时间:2011-11-25 08:25:23

标签: iphone objective-c ios xcode

我是xcode / ios等的新手......并且在解决问题时遇到了一些麻烦。我似乎无法弄清楚如何检索和执行核心数据中实体之间的属性计算。这是我想要做的一个例子:

我的项目是一个拥有一对多关系的足球应用。赛季到赛季(赛季有很多比赛。赛季有球队名称和日期开始等属性。比赛有传球码,跑码等属性。

我怎样才能计算出整个赛季的总传球码数(加上那个赛季所有传球码数)?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

季节的管理对象有一个名为 hasGames 的关系(或者您将其命名为与游戏的关系)。当你有一个季节管理对象时,你可以访问 hasGames 关系(它是一个 NSSet ),遍历那里的所有游戏并用数据做任何你想做的事情,例如添加一些值。

修改

示例:

如果我接受你的关系事业 - >季节 - >游戏,并假设关系被称为Career.hasSeasons和Season.hasGames,它看起来像这样

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 :(得分:0)

我最终在堆栈上找到了这段代码。 在正确设置了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

我猜这将包括创建两个fetchedResultsControllers,一个持有游戏,一个用于持有季节,然后做一些类型的嵌套循环来完成所有这些。我会让所有人都知道。

如果有人有更好的方法做到这一点让我知道,就像我说我对这个很新,所以一切都归结为追踪和错误,虽然它可能有用但我知道它可能不是最好的方法大声笑。