2015-10-14 2 views
1

У меня есть список результатов в массиве, который содержит имя и URL для каждого основного объекта.Поиск 2 мерных массива для tableView objC

Имя - это то, что будет искать, а 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]]; 

} 

что-то не возвращает ничего в результатах поиска. Он работал, когда у меня был единственный массив. Итак, как я могу искать через TableData только для первого вспомогательного объекта, а не для URL.

это, как я заполнить массив в предыдущем ViewController

for(NSDictionary *eachEntry in json) 
{ 
    NSString *entry = [eachEntry objectForKey:@"client"]; 
    NSString *imageEntry = [eachEntry objectForKey:@"imgLogo"]; 
    [_tableData addObject:[NSMutableArray arrayWithObjects:entry, imageEntry, nil]]; 
} 

EDIT

Я все еще хочу, чтобы результаты поиска, чтобы содержать оба объекта, как это сделает отображение правильного изображения проще

ответ

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]]; 
} 
+0

Удивительный ответ чувак, это работает, спасибо за ваше время – Rob85

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

+0

oh ok, я посмотрю сейчас, я возьму его, это также будет искать URL-адрес, есть ли способ остановить его, иначе я получу результаты, которые не имеют никакого смысла. – Rob85

+0

Вы могли бы попробовать добавить больше объектов и посмотреть, работает ли это, просто повторите эту строку [tableData addObject: [NSMutableArray arrayWithObjects: entry, imageEntry, nil]]; несколько раз. У моей таблицы данных определенно есть данные init – Rob85

+0

Да добавлено 5-6 объектов в tableData. И получите правильный результат. – Irfan

Смежные вопросы