我有一个类成员“total”,类型为int。我在谓词中使用“total”作为属性:
[NSPredicate predicateWithFormat: @"total ==%i", [searchText intValue]];
此谓词用于在执行搜索时收集匹配项。谓词将存储在iVar searchText
中的用户搜索值与类型为text的属性“total”进行比较。
我能够像这样容易地检查平等:
NSPredicate *filter = [NSPredicate predicateWithFormat: @"total ==%i", [searchText intValue]];
我现在想使谓词更健壮并且像文本搜索一样工作,因此如果用户在搜索框中键入“5”,谓词将返回5,52,550等。
换句话说,我想将“total”(属性)视为谓词过滤器中的字符串,因此我可以使用 BEGINSWITH或CONTAINS 。
我的问题是属性“total”的类型是int,而不是字符串,所以我被卡住了。
这是我的意图(伪代码)
NSPredicate *filter = [NSPredicate predicateWithFormat: @"[total stringValue] BEGINSWITH %@", searchText];
或者
NSPredicate *filter = [NSPredicate predicateWithFormat: @"CAST(total, 'NSString' ) BEGINSWITH %@", searchText];
如果不在班级中创建字符串类型,我怎么能这样做?
谢谢!
答案 0 :(得分:1)
[NSString stringWithFormat:@"%d"]
是将整数转换为字符串的方式。您可以将它与谓词声明一起内联。
关于如何做到
不创建字符串类型
我很困惑你如何在没有创建字符串的情况下将某些东西用作字符串。
你的谓词应该是这样的:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(content BEGINSWITH[c] %@)", [NSString stringWithFormat:@"%d",total]];
答案 1 :(得分:0)
你可以做的一个(有点粗略)的方法是生成一个谓词,如:
total == %d OR total / 10 == %d OR total / 100 == %d OR total / 1000 == %d...
假设您知道总数可能有一个小的最大值。