我有一个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];
答案 0 :(得分:1)
我无法重现确切的问题,但通常不应使用stringWithFormat
来创建谓词。一旦替换的键或值包含,它就会导致问题
任何特殊字符,如空格或引号。
更好的方法是
self.myFilterPredicate = [NSPredicate predicateWithFormat:@"%K == %@", kind, value];
%K
是一个占位符,可替换为密钥路径,例如“status”。