搜索tableView objC的2维数组

时间:2015-10-14 11:27:43

标签: ios objective-c arrays uitableview

我在一个数组中有一个结果列表,其中包含每个主要对象的名称和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]];
}

修改

我仍然希望搜索结果包含两个对象,因为这样可以更容易地显示正确的图像

2 个答案:

答案 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);
}

enter image description here

答案 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]];
}