【问题标题】:Using Casts in a NSPredicate在 NSPredicate 中使用强制转换
【发布时间】:2012-07-27 15:19:46
【问题描述】:

我有一个 int 类型的类成员“total”。我在谓词中使用“总计”作为属性:

[NSPredicate predicateWithFormat: @"total ==%i", [searchText intValue]];

此谓词用于在执行搜索时收集匹配项。谓词比较用户的搜索值,存储在 iVar searchText 中,类型为 text 和属性“total”,类型为 int。

我可以像这样轻松检查是否相等:

 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];

如何在我的类中不创建字符串类型来做到这一点?

谢谢!

【问题讨论】:

    标签: objective-c ios5 nspredicate


    【解决方案1】:

    [NSString stringWithFormat:@"%d"] 是您将整数从整数转换为字符串的方法。你可以把它放在你的谓词声明中。

    至于怎么做

    不创建字符串类型

    我很困惑如何在不创建字符串的情况下将某些内容用作字符串。

    您的谓词应如下所示:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:
                              @"(content BEGINSWITH[c] %@)", [NSString stringWithFormat:@"%d",total]];
    

    【讨论】:

    • 我错过了什么?这会导致解析错误: NSPredicate *filter = [NSPredicate predicateWithFormat: @"[NSString stringWithFormat:@\"%f\",total] BEGINSWITH %@", searchText];
    • 非常感谢,Dustin 但是“total”没有明确的可分配值,所以我不能使用格式说明符。 “total”是要在谓词条件中使用的类成员的名称。需要对此进行更改,以便将“total”视为字符串: NSPredicate *filter = [NSPredicate predicateWithFormat: @"total = %i", [searchText intValue]];
    • 您需要为您的问题添加一些细节;这是什么searchText 变量,为什么要使用它的 int 值?如果您要检查是否相等,您也应该使用==
    • 达斯汀,我编辑了我的问题并添加了更多细节。根据谓词编程指南,“==”和“=”是可以互换的。在比较数字是否相等时,这两个运算符都会返回准确的结果。不过,我确实同意 == 是一个更好的选择
    【解决方案2】:

    您可以这样做的一种(有点粗略)方法是生成一个谓词,例如:

    total == %d OR total / 10 == %d OR total / 100 == %d OR total / 1000 == %d...
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多