2014-01-25 64 views
0

我正在构建一个游戏并且有一个咒语课程。在这个类中有一个这个咒语的活动实例列表。我试图通过使用谓词来检查这个咒语是否已经在某个目标上被投射:target ==%@。但是,下面的代码不会返回任何对象。iOS如何使用自定义对象键创建NSPredicate?

如何检查一个键是否等于谓词中的自定义对象?

-(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 ];