2

我必须在核心数据中设置实体:

游戏和玩家

游戏 - 看起来像这样(简化):board userid

PLAYERS 用户名

PLAYERS 是独一无二的

我需要选择 GAMES 并将 PLAYERS.name 列添加到此结果中。

我已经设置了所有核心数据和关系,并且可以从“表”中进行选择并将其放入数组和 Tableview 中。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"GAMES" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
GamesARRAY =[context executeFetchRequest:fetchRequest error:&error];

等等....

但是我如何选择或访问玩家表中的数据?我知道所有的基础知识和理论,但我真的需要代码示例。不仅仅是答案:使用 NSSet 或类似的..

4

3 回答 3

3

CoreData 不是数据库。

让我再重复一遍。

CoreData 不是数据库。

不要把它想成一个。

CoreData 是一个对象关系图管理和持久化框架。

如果您想访问给定游戏中的玩家,为什么要使用userid在两个实体中使用一个字段?您应该只使用 CoreData 关系。这样,您甚至不必考虑它,您只需访问游戏中的关系属性,就可以取回您的玩家,反之亦然。

您还应该重命名您的实体。GAMES 和 PLAYERS 作为表名可能有意义,但您不希望GAMES*在代码中放置一个代表一个游戏的对象。为什么不直接命名它们GamePlayer

于 2012-12-07T19:08:32.023 回答
0
[[game valueForKey:@"player"] valueForKey:@"name"]

或者,如果你已经设置了相关的类,

game.player.name
于 2012-12-07T19:20:43.467 回答
0

你真的有一个GAMES知道一个PLAYERS实体的关系吗?如果是这样,对于任何GAMES对象,您都可以遍历该关系 ( game.player) 以获取游戏玩家对象的属性。我们在 Core Data 中不做这样的 JOIN;Core Data 使用关系来抽象出诸如外键和 JOIN 之类的东西(即使这些是在 SQLite 后端的幕后完成的,例如)。

此外,正如 Kevin 所指出的,GAMESPLAYERS打破了 Core Data 实体的合理命名约定。Game并且Player好多了。

于 2012-12-07T19:10:22.457 回答