我在一个数组中有一个结果列表,其中包含每个主要对象的名称和URL。
名称是将要搜索的内容,URL是与TableView中每行显示的图像。
如何仅在第一个子对象上搜索和过滤结果?
- (void)filterContentForSearchText:(NSString*)searchText scope: (NSString*)scope
{
[self.searchResult removeAllObjects];
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", searchText];
self.searchResult = [NSMutableArray arrayWithArray: [self.TableData filteredArrayUsingPredicate:resultPredicate]];
}
这不会在搜索结果中返回任何内容。当我有一个阵列时,它工作。那么我如何只在第一个子对象而不是URL上搜索TableData。
这是我在以前的viewController中填充数组的方法
for(NSDictionary *eachEntry in json)
{
NSString *entry = [eachEntry objectForKey:@"client"];
NSString *imageEntry = [eachEntry objectForKey:@"imgLogo"];
[_tableData addObject:[NSMutableArray arrayWithObjects:entry, imageEntry, nil]];
}
修改
我仍然希望搜索结果包含两个对象,因为这样可以更容易地显示正确的图像
答案 0 :(得分:1)
尝试了与您提供的相同代码。它正确地给出了过滤结果。确保您的数据已填满。
- (void)viewDidLoad {
[super viewDidLoad];
[searchResult removeAllObjects];
tableData = [[NSMutableArray alloc] init];
NSString *entry = @"client";
NSString *imageEntry = @"imageEntry";
[tableData addObject:[NSMutableArray arrayWithObjects:entry, imageEntry, nil]];
NSString *searchText = @"client";
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", searchText];
searchResult = [NSMutableArray arrayWithArray: [tableData filteredArrayUsingPredicate:resultPredicate]];
NSLog(@"%@", searchResult);
}
答案 1 :(得分:1)
如果您将条目和图像放入字典中,则可以使用密钥进行搜索。
for(NSDictionary *eachEntry in json)
{
NSString *entry = [eachEntry objectForKey:@"client"];
NSString *imageEntry = [eachEntry objectForKey:@"imgLogo"];
[_tableData addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:entry, @"entry", imageEntry, @"imageEntry", nil]];
}
- (void)filterContentForSearchText:(NSString*)searchText scope: (NSString*)scope
{
[self.searchResult removeAllObjects];
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"entry contains[c] %@", searchText];
self.searchResult = [NSMutableArray arrayWithArray: [self.TableData filteredArrayUsingPredicate:resultPredicate]];
}