2017-10-20 4 views
0

J'ai besoin d'un moyen d'appeler un sélecteur dans NSPredicate. J'ai un tableau d'objets MyElement. Une propriété de MyElement est "keywords" qui est simplement un tableau de chaînes. Actuellement, je prépare un prédicat de trouver un ensemble de MyElements contenant un mot-clé particulier (quelque part dans chaque array de mot-clé de MyElement):Sélecteur d'appel dans NSPredicate

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"%@ IN keywords", someString]; 

Depuis des mots-clés est une propriété de MyElement (de type NSArray) tout fonctionne très bien. Cependant, maintenant je dois faire une manipulation du tableau avant qu'il ne revienne au prédicat. Quelque chose comme:

NSString* key = // a key used to help shape the array 
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"%@ IN keywordsSpecialArray:key", someString]; 

Cela doit appeler keywordsSpecialArray: clé dans chaque MyElement qui retournera un tableau massé. Ce tableau est une version légèrement modifiée du tableau qui aurait été retournée en utilisant simplement @ "% @ IN keywords".

Quelle est la bonne syntaxe pour cela?

+0

Si 'key' est une propriété de' MyElement' vous pouvez ajouter une propriété calculée 'massagedKeywords' qui retourne' [auto keywordsSpecialArray: self.key] '. – Willeke

+0

Ce n'est pas. Pas que cela compte vraiment, mais ce qui précède est une version simplifiée. En réalité, MyElement a une propriété appelée userFields qui est un NSDictionary utilisant les UUID en tant que clés et NSStrings en tant que valeurs. MyElement implémente valueForUndefinedKey pour accéder à ces champs qui recherchent simplement la valeur dans mon dictionnaire. Parfois, je veux ce champ directement comme une chaîne, mais parfois j'ai besoin de le masser comme un tableau. keywordsSpecialArray: la clé est censée obtenir la chaîne de champ pour key (en passant par valueForUndefinedKey) et ensuite masser les résultats dans un tableau spécial. – Trygve

+0

Je finis par obtenir: Impossible d'analyser la chaîne de format "% @ IN keywordsSpecialArray:% K". Notez que la "clé" doit être dynamique, donc le% K. – Trygve

Répondre

0

Cela fonctionne:

predicate = [NSPredicate predicateWithFormat:@"%@ IN FUNCTION(self, 'keywordsSpecialArray:', %@)", value, key];