在NSPredicate中使用强制转换

时间:2012-07-27 15:19:46

标签: objective-c ios5 nspredicate

我有一个类成员“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];

如果不在班级中创建字符串类型,我怎么能这样做?

谢谢!

2 个答案:

答案 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...

假设您知道总数可能有一个小的最大值。