2014-01-25 139 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 ];