iOS如何使用自定义对象键创建NSPredicate?

时间:2014-01-25 01:20:30

标签: ios objective-c nsarray filtering nspredicate

我正在构建游戏并拥有一个拼写课程。在这个课程中,有一个这个法术的活动实例列表。我试图通过使用谓词检查此法术是否已经在某个目标上施放: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;
    }

1 个答案:

答案 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 ];