我需要过滤多对多的关系。这意味着我有第三个表用于此连接。
Event <<- EventPlayerState ->> Player
我试图找出一个事件是否已经通过EventPlayerState
连接了播放器。
EventPlayerState
表包含属性isActive
,用于指示玩家是否在活动中处于活动状态。
我访问了事件关系属性hasEventPlayerStates
。并尝试使用NSPredicate
过滤它。但它总是返回错误。
NSPredicate *seachPlayerPredicate = [NSPredicate predicateWithFormat:@"(hasPlayer = %@)", [player objectID]];
NSSet *playerEventStates = [event hasPlayerEventStates];
NSSet *filteredPlayer = [playerEventStates filteredSetUsingPredicate:seachPlayerPredicate];
if([filteredPlayer count] == 1) {
return YES;
}
return NO;
有什么问题?或者有更好的方法吗?
答案 0 :(得分:2)
如果您没有在连接表中存储任何其他信息,那么连接这两个实体的表就是多余的。然后,您应该只在Player
和Event
之间建立多对多关系。
谓词也简单得多:
[NSPredicate predicateWithFormat:@"players.@count = 0"]
或检查特定事件
event.players.count == 0
如果您确实需要连接表,例如因为您正在存储时间戳或其他信息,从Event
的角度看它仍然看起来有点相同。
相应的检查完全相同:
[NSPredicate predicateWithFormat:@"playerStates.@count = 0"]
event.playerStates.count == 0