我有一個名爲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