我正在构建游戏并拥有一个拼写课程。在这个课程中,有一个这个法术的活动实例列表。我试图通过使用谓词检查此法术是否已经在某个目标上施放:target ==%@。但是,下面的代码不会返回任何对象。
如何检查某个键是否与谓词中的自定义对象相同?
-(BOOL)checkHasUniqueInstanceWithModel:(CharacterModelNode*)targetModel
{
NSPredicate *uniqueSkillInstancePredicate =
[NSPredicate predicateWithFormat:@"target == %@", targetModel];
NSArray *results = [self.activeInstances filteredArrayUsingPredicate:uniqueSkillInstancePredicate];
if(results.count == 0)
{
return NO;
}else if(results.count == 1)
{
return YES;
}else
{
NSAssert(false,@"Duplicate unique instance with skill: %@ on target: %@",self.name,targetModel.character.name);
}
return NO;
}
答案 0 :(得分:1)
使用带有块的谓词:
NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(Spell* evaluatedObject, NSDictionary *bindings) {
if([evaluatedObject.target isEqual: targetModel])
{
return true;
}
return false;
}];
NSArray *results = [self.activeInstances filteredArrayUsingPredicate:pred ];