【发布时间】:2014-06-05 07:39:57
【问题描述】:
我有一个NSManagedObject 具有以下属性:
- 状态
- 种类
- 优先级
现在我希望能够分别使用这些属性过滤我的实体。所以我希望我必须有一个这样的谓词:
status CONTAINS[c] ‘open’
我得到非常奇怪的结果,只要我的谓词中有两个变量并且我必须反转 kind 和 value 在我的情况下的顺序,以便我得到想要的结果:
NSString *kind = @"status"; // DEBUGGING
NSString *value = @"open"; // DEBUGGING
// This works although it defies all logic
NSString *predicate = [NSString stringWithFormat:@"('%@' CONTAINS[c] %@)", value, kind];
self.myFilterPredicate = [NSPredicate predicateWithFormat:predicate];
但是,由于某种原因,这不起作用:
NSString *predicate = [NSString stringWithFormat:@"(%@ CONTAINS[c] ‘%@‘)”, kind, value];
【问题讨论】:
-
我无法重现您的问题。第一个谓词字符串导致崩溃。第二个谓词无法编译,因为它包含印刷引号而不是简单引号。修复该问题后,第二个谓词字符串起作用并给出预期结果。 - 但是,正确的方法是使用
self.myFilterPredicate = [NSPredicate predicateWithFormat:@"%K == %@", kind, value];。 -
@MartinR 对这些角色感到抱歉。你能告诉我
%K在这个例子中做了什么吗?
标签: objective-c macos core-data nsstring nspredicate