【发布时间】:2017-10-20 22:47:49
【问题描述】:
我需要一种在 NSPredicate 中调用选择器的方法。我有一个 MyElement 对象数组。 MyElement 的一个属性是“关键字”,它只是一个字符串数组。目前我准备了一个谓词来查找一组包含特定关键字的 MyElement(在每个 MyElement 的关键字数组中的某个位置):
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"%@ IN keywords", someString];
因为关键字是 MyElement(NSArray 类型)的一个属性,所以一切都很好。但是,现在我需要在返回谓词之前对数组进行一些操作。比如:
NSString* key = // a key used to help shape the array
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"%@ IN keywordsSpecialArray:key", someString];
这需要在每个 MyElement 中调用keywordsSpecialArray:key,这将返回一个经过处理的数组。该数组是该数组的略微修改版本,仅使用 @"%@ IN 关键字" 即可返回。
执行此操作的正确语法是什么?
【问题讨论】:
-
如果
key是MyElement的属性,您可以添加一个计算属性massagedKeywords,它返回[self keywordsSpecialArray:self.key]。 -
不是。这并不是说它真的很重要,但上面是一个简化版本。实际上,MyElement 有一个名为 userFields 的属性,它是一个使用 UUID 作为键和 NSString 作为值的 NSDictionary。 MyElement 实现 valueForUndefinedKey 来获取这些字段,这些字段只是在我的字典中查找值。有时我希望该字段直接作为字符串,但有时我需要将其作为数组进行按摩。 keywordsSpecialArray:key 应该获取 key 的字段字符串(通过 valueForUndefinedKey),然后将结果按摩到一个特殊的数组中。
-
我最终得到:无法解析格式字符串“%@ IN keywordsSpecialArray:%K”。请注意,“键”必须是动态的,因此 %K。
标签: cocoa nspredicate