編集:コメント用に新しいラフテーブルモデルを追加します。これはあなたが念頭に置いていたものですか?Xcode:複雑な述語を使用してコアデータセットをフィルタリングする
私はまだコアデータセットのために検索フィルタをうまくしようとしています。 hereがついてしまったので、別の方法で問題に近づいています。
まず、私がやろうとしていることは以下の通りです:
すべてのオブジェクトを繰り返し処理(tableViewModel.itemsでNSManageObject *オブジェクト)
'は、それぞれのすべてのサブエンティティオブジェクトを抽出オブジェクト 'を検索し、検索タームに対して検証します。
検索語が(それが既に存在しない場合)「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;
}
私のテストでは、person.name "私"、 "あなた"、そして "母"の3つのオブジェクトがあります。その他のフィールドはすべてのオブジェクトで空白です。
今、各検索で選択されているオブジェクトの数を確認するのをやめています。本質的に、searchTextは検出されますが無視されます。つまり、ルーチンはsearchTextに "me"が含まれていると見なしますが、実際のテキストが "You"であるObjectを追加します。
それはこの例を減らすために役立つならば、私は、私に知らせてください..任意のヘルプをお願い申し上げます。..
er。ありがとう..私は右が何かありますか? :) –