我有一个文件路径数组,我的UI中有一个 NSPredicateEditor 设置,用户可以组合NSPredicate来查找文件即可。他应该能够按名称,类型,尺寸和日期进行过滤。
我现在有几个问题:
我可以将谓词拆分为不同的谓词 将其转换为NSString对象,然后搜索每个@“OR”| @“AND”并将组件分成数组然后 将每个NSString转换为新的谓词?
在NSPredicateEditor设置中,我有一些“左表达式”的选项: 键区,常量值,字符串,整数,浮点数和日期。我想用“name”,“type”,“date”,“size”向用户显示一个下拉菜单。但是生成的谓词会自动显示如下:
"name" MATCHES[c] "nameTest" OR "type" MATCHES[c] "jpg" OR size == 100
因为数组中填充了字符串,搜索“name”,“type”等,并且这些字符串不响应@“myString”* .name * m过滤器总是返回0个对象。有没有办法在菜单中显示名称,类型,大小和日期,但是不用手工将“自我”写入谓词?
我已经在Apple官方教程,Stackoverflow,Google甚至Youtube上搜索了一些线索。这个问题困扰了我差不多一个星期了。谢谢你的时间!如果您需要更多信息,请告诉我们!
答案 0 :(得分:3)
你来对了地方! :)
我只能从编辑器中获取一个谓词对象。
正确。它是NSPredicateEditor
,而不是NSPredicatesEditor
。 ;)
当我使用“predicateForRow:”时,它返回
(null)
我不确定我会使用那种方法。我的一般经验法则是在很大程度上忽略NSPredicateEditor
是NSRuleEditor
的子类,主要是因为它是一个高度专业化的子类,许多超类方法在谓词编辑器中没那么有意义(像所有关于标准,行选择等的东西)。它们可能在某种程度上相关,但如果它们是,我还没有想出如何。
要从编辑器获取谓词,请执行以下操作:
NSPredicate *predicate = [myPredicateEditor objectValue];
如果用户想要按名称和大小或日期过滤文件
你的意思是(name = [something]) AND (size = [something] OR date = [something])
?
如果是这样,如果您将嵌套模式设置为“复合”,则NSPredicateEditor
可以执行此操作。
我不能再在我的数组上使用这个谓词了,因为那些信息不包含在其中
您需要哪些信息?
我可以将谓词拆分为不同的谓词而不将其转换为NSString对象,然后搜索每个@“OR”| @“AND”并将组件分成一个数组,然后将每个NSString转换为一个新的谓词?
是的,但这是 BAD 的想法。这很糟糕,因为NSPredicate
已经包含了您需要的所有信息,并且将其转换为其他格式并且执行 string 操作不是必需的,并且可能会导致复杂化(例如,如果有人可以输入“name”的值,如果输入“OR”会发生什么?)。
我很难弄清楚你想要做什么。听起来你有一组NSString
个对象要根据用户创建的谓词进行过滤?如果是这样,那么这些name
,date
和size
关键路径的含义是什么?你想做什么?