編輯:我添加了一個新的粗糙表模型的評論。這是你想到的嗎?Xcode:使用複雜的謂詞來過濾核心數據集
我還在努力制定出一個核心數據集的搜索過濾器。我卡住here,所以我以不同的方式接近問題。
首先,我想要做的是以下幾點:
通過迭代所有對象(NSManageObject *在tableViewModel.items對象)
提取所有爲每個子實體對象「對象「並根據搜索詞進行驗證。
如果搜索詞並在子實體存在,則添加「對象」到「autoSearchResults」(如果它不存在那裏)
我的代碼如下:
NSLog(@"%s", __FUNCTION__);
NSMutableArray *startArray = [NSMutableArray array];
NSMutableArray *filteredArray = [NSMutableArray array];
for (NSManagedObject *object in tableViewModel.items)
{
NSLog(@"1 ");
NSSet *set1 = [object valueForKeyPath:@"people.name"];
NSString *str1 = [[set1 allObjects] componentsJoinedByString:@", "];
peopleSet = str1;
NSLog (@"peopleSet is %@ ", peopleSet);
NSLog(@"2 ");
NSSet *set2 = [object valueForKeyPath:@"place.name"];
NSString *str2 = [[set2 allObjects] componentsJoinedByString:@", "];
placeSet = str2;
NSLog(@"3 ");
NSSet *set3 = [object valueForKeyPath:@"keyword.name"];
NSString *str3 = [[set3 allObjects] componentsJoinedByString:@", "];
keywordSet = str3;
NSLog(@"4 ");
NSSet *set4 = [object valueForKeyPath:@"type.name"];
NSString *str4 = [[set4 allObjects] componentsJoinedByString:@", "];
typeSet = str4;
NSLog(@"5 ");
NSSet *set5 = [object valueForKeyPath:@"symbol.name"];
NSString *str5 = [[set5 allObjects] componentsJoinedByString:@", "];
symbolSet = str5;
NSLog(@"6 ");
NSLog (@"searchText is: %@ ", searchText);
myPredicate = [NSPredicate predicateWithFormat:@"(peopleSet contains[cd] %@) || (placeSet contains[cd] %@) || (keywordSet contains[cd] %@) || (typeSet contains[cd] %@) || (symbolSet contains[cd] %@)", searchText, searchText, searchText, searchText, searchText ];
NSLog(@"7 ");
if (myPredicate) {
[startArray addObject:object];
NSLog (@"startArray.count is %i ", startArray.count);
}
NSLog(@"8 ");
NSLog (@"startArray.count is %i ", startArray.count);
/*
if (startArray.count == 0)
{
NSLog(@"0");
} else {
NSLog(@"9 ");
[filteredArray addObject: startArray];
NSLog(@"10 ");
[startArray removeAllObjects];
NSLog(@"11 ");
}
*/
}
//autoSearchResults = filteredArray;
return autoSearchResults;
}
在我的測試中,我有3個對象,一個是person.name「我」,一個是「you」,另一個是「Mother」。所有其他字段在所有對象中都是空白的。
現在,我停下來看看爲每個搜索選擇了多少個對象。基本上,searchText被找到但被忽略。也就是說,例程看到searchText包含「我」,例如,但仍然添加一個對象,其中實際文本是「你」。
我希望得到任何幫助。如果這將有助於減少這個例子中,請讓我知道..
呃。謝謝..有什麼我對嗎? :) – 2012-02-09 01:47:08