3

我有一个文件路径数组,并且我的 UI 中有一个NSPredicateEditor设置,用户可以在其中组合一个 NSPredicate 来查找文件。他应该能够按名称、类型、大小和日期进行过滤

我现在有几个问题:

  • 我只能从编辑器中获得一个谓词对象。当我使用 “predicateForRow:”时,它返回 (null)
  • 如果用户想按名称和大小或日期过滤文件,我不能再在我的数组上使用这个谓词,因为这些信息不包含在其中

我可以将谓词拆分为不同的谓词而不将其转换为 NSString 对象,然后搜索每个 @" OR " | @" AND " 并将组件分隔成一个数组,然后将每个 NSString 转换为一个新的谓词?


在 NSPredicateEditor 设置中,我有一些“左表达式”选项: Keypaths、Constant Values、Strings、Integer Numbers、Floating Point NumbersDates。我想用“名称”、“类型”、“日期”、“大小”向用户显示一个下拉菜单。但是生成的谓词自动看起来像这样:

"name" MATCHES[c] "nameTest" OR "type" MATCHES[c] "jpg" OR size == 100

因为数组中填充了字符串,所以搜索“name”、“type”等并且这些字符串不响应 @"myString"*.name*m 过滤器总是返回 0 个对象。有没有办法在菜单中显示名称、类型、大小和日期,但不手动将“self”写入谓词?

我已经在 Apple 官方教程、Stackoverflow、Google 甚至 Youtube 上搜索过,以找到线索。这个问题困扰了我将近一个星期。谢谢你的时间!如果您需要更多信息,请告诉我!

4

1 回答 1

3

你来对地方了!:)

我只能从编辑器中获得一个谓词对象。

正确的。它是一个NSPredicateEditor,不是一个NSPredicatesEditor。;)

当我使用“predicateForRow:”它返回(null)

我不确定我会使用那种方法。我的一般经验法则是在很大程度上忽略它NSPredicateEditor的子类NSRuleEditor,主要是因为它是一个高度专业化的子类,以至于许多超类方法在谓词编辑器上没有那么大的意义(就像所有关于标准、行选择的东西一样) , ETC)。它们可能以某种方式相关,但如果它们是相关的,我还没有弄清楚如何

要从编辑器获取谓词,您可以:

NSPredicate *predicate = [myPredicateEditor objectValue];

如果用户想按名称和大小或日期过滤文件

你的意思是(name = [something]) AND (size = [something] OR date = [something])

如果是这样NSPredicateEditor,如果您已将嵌套模式设置为“复合”,则可以这样做。

我不能再在我的数组上使用这个谓词,因为这些信息不包含在其中

你需要什么信息?

我可以将谓词拆分为不同的谓词而不将其转换为 NSString 对象,然后搜索每个 @" OR " | @" AND " 并将组件分隔成一个数组,然后将每个 NSString 转换为一个新的谓词?

是的,但这是个主意。这很糟糕,因为NSPredicate已经包含了您需要的所有信息,并且没有必要将其转换为不同的格式并进行字符串操作,并且可能会导致并发症(例如,如果有人可以输入“名称”的值,如果他们输入“或”?)。

I'm having a hard time trying to figure out what it is you're trying to do. It sounds like you have an array of NSString objects that you want to filter based on a predicate that the user creates? If so, then what do these name, date, and size key paths mean? What are you trying to do?

于 2012-07-07T16:49:07.750 回答