我必须在核心数据中使用实体:
游戏和玩家
GAMES - 看起来像这样(简化): 板 用户ID
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或类似..
答案 0 :(得分:3)
CoreData不是数据库。
让我再说一遍。
不要把它想象成一个。
CoreData是一个对象关系图管理和持久性框架。
如果您想要访问特定游戏中的玩家,为什么在两个实体中都使用userid
字段?您应该只使用CoreData关系。这样你甚至不必考虑它,你只需访问你游戏中的关系属性就可以恢复你的玩家,反之亦然。
您还应该重命名您的实体。游戏和玩家可能会像表名一样有意义,但你不希望代码中有一个代表一个游戏的GAMES*
对象。为什么不将它们命名为Game
和Player
?
答案 1 :(得分:0)
你真的与知道GAMES
实体的PLAYERS
有关系吗?如果是这样,对于任何GAMES
对象,您可以遍历该关系(game.player
)以获取游戏玩家对象的属性。我们不在核心数据中这样做JOIN; Core Data使用关系抽象出外键和JOIN之类的东西(例如,这些都是在SQLite后端的幕后完成的。)
另外,正如Kevin所说,GAMES
和PLAYERS
打破了核心数据实体的合理命名约定。 Game
和Player
要好得多。
答案 2 :(得分:0)
[[game valueForKey:@"player"] valueForKey:@"name"]
或者,如果您已设置相关课程,
game.player.name