【问题标题】:NSPredicate format string doesn't workNSPredicate 格式字符串不起作用
【发布时间】:2012-09-13 20:02:33
【问题描述】:

在我的代码中,我想检查一条记录是否已经存在,所以我知道是创建它还是更新它。但是我遇到了一个问题。问题是当我使用这个时:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"%@ == %@", ATTRIBUTE_ID, idNumber];
[request setPredicate:pred];

这不起作用。它总是声称没有找到任何结果。但是,当我像这样重写它时它工作得很好:

NSExpression *lhs = [NSExpression expressionForKeyPath:ATTRIBUTE_ID];
NSExpression *rhs = [NSExpression expressionForConstantValue:idNumber];
NSPredicate *pred = [NSComparisonPredicate
                                     predicateWithLeftExpression:lhs
                                     rightExpression:rhs
                                     modifier:NSDirectPredicateModifier
                                     type:NSEqualToPredicateOperatorType
                                     options:0];
[request setPredicate:pred];

我在格式字符串中遗漏了什么或做错了什么?

【问题讨论】:

  • Monolo 的答案是正确的,但我建议使用这种方法而不是格式一。这个更快。

标签: objective-c cocoa foundation


【解决方案1】:

您的ATTRIBUTE_ID 是一个键,因此您应该在该部分的格式字符串中使用%K

格式字符串看起来像这样(在 cmets 中指出的大写 K):

[NSPredicate predicateWithFormat:@"%K == %@", ATTRIBUTE_ID, idNumber];

【讨论】:

  • 感谢 Monolo!一个更正——我认为它必须是大写的 %K 才能工作
猜你喜欢
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多