【问题标题】:Call selector within NSPredicate [duplicate]NSPredicate 中的调用选择器 [重复]
【发布时间】: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 关键字" 即可返回。

执行此操作的正确语法是什么?

【问题讨论】:

  • 如果keyMyElement 的属性,您可以添加一个计算属性massagedKeywords,它返回[self keywordsSpecialArray:self.key]
  • 不是。这并不是说它真的很重要,但上面是一个简化版本。实际上,MyElement 有一个名为 userFields 的属性,它是一个使用 UUID 作为键和 NSString 作为值的 NSDictionary。 MyElement 实现 valueForUndefinedKey 来获取这些字段,这些字段只是在我的字典中查找值。有时我希望该字段直接作为字符串,但有时我需要将其作为数组进行按摩。 keywordsSpecialArray:key 应该获取 key 的字段字符串(通过 valueForUndefinedKey),然后将结果按摩到一个特殊的数组中。
  • 我最终得到:无法解析格式字符串“%@ IN keywordsSpecialArray:%K”。请注意,“键”必须是动态的,因此 %K。

标签: cocoa nspredicate


【解决方案1】:

这行得通:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2011-04-03
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多