En supposant que vos objets soient tous d'un type similaire, vous pourriez ajouter une méthode en tant que catégorie de leur classe de base qui appelle la fonction que vous utilisez pour vos critères. Créez ensuite un objet NSPredicate qui fait référence à cette méthode.
Dans une certaine catégorie, définissez votre méthode qui utilise votre fonction
@implementation BaseClass (SomeCategory)
- (BOOL)myMethod {
return someComparisonFunction(self, whatever);
}
@end
Ensuite, où que vous soyez, vous filtrerez :
- (NSArray *)myFilteredObjects {
NSPredicate *pred = [NSPredicate predicateWithFormat:@"myMethod = TRUE"];
return [myArray filteredArrayUsingPredicate:pred];
}
Bien sûr, si votre fonction ne compare que des propriétés accessibles à partir de votre classe, il peut être plus facile de convertir les conditions de la fonction en une chaîne de prédicats.