我正在尝试设置我的核心数据模型。我希望有一个有一个输家和一个赢家的游戏。我需要一个拥有多个游戏的玩家。
我有以下内容:
实体: 播放器
属性: 胜 损失, 名称
关系: 游戏目的地:游戏逆转:???赢家还是输家???
实体: 游戏
属性: losingScore, winningScore,
关系: 失败者目的地:玩家反向:游戏, 获胜者目的地:玩家反向:游戏
我该如何设置?
谢谢!
答案 0 :(得分:1)
为什么不呢:
你可以偶然获得gamesWon.count和gamesLost.count的胜利/亏损而不是属性。
答案 1 :(得分:1)
考虑一下......
游戏中有玩家。游戏中的每个玩家都获得了分数。无论他们输赢,都取决于他们的分数与其他球员的比分相比。
我的建议......
Player
NSString *name
playerGames
一对多Game
Game
NSString *reference
(例如Game" 1")NSNumber *scorePlayer1
NSNumber *scorePlayer2
NSDate *timeStamp
)选项?gamePlayer1
多对一Player
gamePlayer2
多对一Player
(玩家2不能与玩家1相等)那么我们可以......
Game *game = [[Game alloc] init...];
if (game.scorePlayer1 > game.scorePlayer2) {
NSLog("%@ is winner and %@ is loser with score %@-%@", game.gamePlayer1.name, gamePlayer2.name, scorePlayer1, scorePlayer2);
} else if (game.scorePlayer2 > game.scorePlayer1) {
NSLog("%@ is winner and %@ is loser with score %@-%@", game.gamePlayer2.name, gamePlayer1.name, scorePlayer2, scorePlayer1);
} else {
NSLog("Players %@ and %@ drew with score %@-%@", game.gamePlayer1.name, gamePlayer2.name, scorePlayer1, scorePlayer2);
}
Player *player = [[Player alloc] init...];
NSFetchRequest *requestWins = [[NSFetchRequest alloc] initWithEntity:@"Game"];
NSPredicate *predicateAsPlayer1 = [NSPredicate predicateWithFormat: @"(%@ >= %@) && (game.gamePlayer1.name == %@)", game.scorePlayer1, game.scorePlayer2, player];
NSPredicate *predicateAsPlayer2 = [NSPredicate predicateWithFormat: @"(%@ >= %@) && (game.gamePlayer2.name == %@)", game.scorePlayer2, game.scorePlayer1, player];
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicateAsPlayer1, predicateAsPlayer2]];
[requestWins setPredicate:predicate];
NSArray *arrayWins = [managedObjectContext executeFetchRequest:requestWins];
NSFetchRequest *requestLosses = [[NSFetchRequest alloc] initWithEntity:@"Game"];
...<repeat similar to above>...
NSArray *arrayLosses = [managedObjectContext executeFetchRequest:requestLosses];
NSInteger gamesPlayed = player.playerGames.count;
NSInteger gamesWon = arrayWins.count;
NSInteger gamesLost = arrayLosses.count;
NSInteger gamesDrawn = gamesPlayed - gamesWon - gamesLost;
希望这有帮助。