gpt4 book ai didi

cocoa - Cocoa 中的自定义 NSPredicate

转载 作者:行者123 更新时间:2023-12-03 17:16:25 25 4
gpt4 key购买 nike

我有一个 NSTableView,其列绑定(bind)到 NSArrayController 的子类。 “值”列的每个条目都是文件路径(在模型中)的列表,特别是应用程序的 PATH 和 PYTHONPATH。

我想要的是控制对这些值的编辑,以确保列表中的每个路径都是有效的。由于我使用绑定(bind),我想我应该编写某种 NSPredicate 但我想让它使用我定义的函数来执行过滤器,因为测试有点复杂。如何将自定义函数与 NSPredicate 一起使用?

或者我应该考虑另一种方法?

谢谢。

更新:

我已经弄清楚如何使用 NSString 上添加方法 validate 的类别,将包含文件路径的字符串转换为计算结果为我想要的内容的表达式。但我仍然不知道如何将其放入过滤谓词中。

NSString *s = @"~:~/Desktop";
NSExpression *f = [NSExpression expressionForConstantValue:s];
NSExpression *e = [NSExpression expressionForFunction:f
selectorName:@"validate"
arguments:nil];

我想这基本上是一个过滤谓词,它总是输出表达式的计算结果..

最佳答案

非常简单:

NSString *s = @"~:~/Desktop";
NSPredicate *p = [NSPredicate predicateWithFormat:@"FUNCTION(%@, 'validate') == YES", s];

或者,如果您有一个字符串数组,想要过滤以查找所有通过验证的字符串:

NSArray *array = ...; //your array of strings needing validation
NSPredicate *p = [NSPredicate predicateWithFormat:@"FUNCTION(SELF, 'validate') == YES"];
NSArray *filtered = [array filteredArrayUsingPredicate:p];

这里需要注意的一点是,-validate 方法的结果必须是一个id。因此,如果它返回 true/false 值,它应该返回一个装在 NSNumber 中的 BOOL。 (谓词格式字符串中的 YES 会自动为您转换为 NSNumber)

获得谓词后,您可以将其设置到数组 Controller 或其他任何位置。

关于cocoa - Cocoa 中的自定义 NSPredicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5279213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com