我有一个名为Contact
类,它具有,除其他外,以下属性的实例的阵列的阵列,以进行搜索:使用NSPredicate通过对象
NSArray *mailAddressList // Array of NSString
NSArray *websiteList // Array of NSString
NSArray *tags // Array of instances of Tag class
类标签具有以下属性:
NSString *name;
UIColor *color;
我想使用NSPredicate在每个Contact
的任何属性中搜索字符串。这是我的代码:
if([scope isEqualToString:SCOPE_MAIL] || [scope isEqualToString:SCOPE_WEBSITE])
{
// Search through an array
predicate = [NSPredicate predicateWithFormat:@"ANY SELF.%@ contains[c] %@", scope, textSearch];
}
else if([scope isEqualToString:SCOPE_TAG])
{
// Search another object's property
predicate = [NSPredicate predicateWithFormat:@"SELF.%@.name contains[c] %@", scope, textSearch];
}
else
{
// The rest of the properties are instances of NSString
predicate = [NSPredicate predicateWithFormat:@"SELF.%@ contains[c] %@", scope, textSearch];
}
一切正常,除了SCOPE_TAG
细,它不返回任何值。我不认为我正确使用谓词。
注:我是新与NSPredicate所以我想听到一些见解,如果我在做什么都不行
不是100%肯定是什么对你的问题负责,但你应该使用'%K'格式说明符来代替'%@'而不是'%@'。因此,例如'SCOPE_TAG'的格式字符串为'SELF。%K.name contains [c]%@“' – indragie
感谢您的评论,我将它改为'%K',但行为没有改变 –
难道你不想错过第二个谓词语句中的ANY吗?我想你想检查数组中是否有任何标签名称包含文本... – Alexander