我没有NSPredicate
基于 - 的解决方案,或者可能没有您希望的任何优雅的解决方案,但是我遇到了同样的问题并编写了自己的解决方案,实际上并没有那么糟糕。
我的解决方案是针对只能有两个参与者的游戏,因此请进行相应修改,但这是我最终使用的代码:
[myGamesArray sortUsingComparator:^NSComparisonResult(CHGame *game1,
CHGame *game2) {
if (YES == [game1 localPlayersTurn] && NO == [game2 localPlayersTurn]) {
return NSOrderedAscending;
} else if (NO == [game1 localPlayersTurn] && YES == [game2 localPlayersTurn]) {
return NSOrderedDescending;
}
NSDate *lm1 = [game1.match lastMove];
NSDate *lm2 = [game2.match lastMove];
if (lm1 != nil && lm2 != nil) {
return [lm1 compare:lm2];
}
return NSOrderedSame;
}];
whereCHGame
是我为我的游戏构建的自定义类(具有GKTurnBasedMatch
match
属性),并且实例方法localPlayersTurn
返回一个BOOL
指示是否轮到本地参与者。
然后我lastMove
在一个类别中写了一个方法GKTurnBasedMatch
:
- (NSDate *)lastMove {
GKTurnBasedParticipant *localParticipant, *otherParticipant;
NSDate *lastMove;
for (GKTurnBasedParticipant *participant in self.participants) {
if (YES == [participant.playerID isEqualToString:[GKLocalPlayer localPlayer].playerID]) {
localParticipant = participant;
} else {
otherParticipant = participant;
}
}
if (localParticipant == self.currentParticipant) {
lastMove = otherParticipant.lastTurnDate;
} else {
lastMove = localParticipant.lastTurnDate;
}
return lastMove;
}
同样,这仅适用于总共两个参与者,但对于任意数量的参与者都可以轻松修改。
希望这会有所帮助,即使它不完全符合您的要求。