SearchDisplayController ищет в нескольких массивах

Хорошо, после долгих поисков, колебаний и дальнейших поисков я просто не могу понять это.

У меня есть SearchDisplayController, и у меня есть четыре разных массива, в которых я ищу с помощью NSPredicate, потому что каждая UITableViewCell состоит из 4 строк (название, описание и т. д.).

Теперь у меня есть 4 поисковых массива, search_title, search_description и т. д., которые заполнены следующим образом:

- (void)filterContentForSearchText:(NSString*)searchText 
                             scope:(NSString*)scope
{
    NSPredicate *resultPredicate = [NSPredicate 
                                    predicateWithFormat:@"SELF contains[cd] %@",
                                    searchText];

    self.search_category = [self.temp_category filteredArrayUsingPredicate:resultPredicate];
    self.search_producttitle = [self.price_producttitle filteredArrayUsingPredicate:resultPredicate];
    self.search_type = [self.price_type filteredArrayUsingPredicate:resultPredicate];
    self.search_description = [self.price_description filteredArrayUsingPredicate:resultPredicate];

Когда я использую NSLog (количество массивов), я вижу, что он работает, потому что он дает правильное количество каждого массива, когда я ввожу поисковый запрос.

Моя ячейка tableview выглядит так:

if ([tableView isEqual:self.searchDisplayController.searchResultsTableView]){
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.nameLabel.text = [self.search_producttitle objectAtIndex:[[searchResults objectAtIndex:indexPath.row] integerValue]];
        cell.priceLabel.text = [self.search_price objectAtIndex:[[searchResults objectAtIndex:indexPath.row] integerValue]];
        cell.descrLabel.text = [self.search_description objectAtIndex:[[searchResults objectAtIndex:indexPath.row] integerValue]];
        cell.IDLabel.text = [self.search_type objectAtIndex:[[searchResults objectAtIndex:indexPath.row] integerValue]];
    }
    else{
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.nameLabel.text = [price_producttitle objectAtIndex:indexPath.row];
        cell.IDLabel.text = [price_type objectAtIndex:indexPath.row];
        cell.priceLabel.text = [price objectAtIndex:indexPath.row];
        cell.descrLabel.text = [price_description objectAtIndex:indexPath.row];

Может быть, вы уже видите, что я пытаюсь сделать. Сейчас я создаю новые массивы из старых массивов, которые я называю поисковыми массивами. Однако эти массивы независимы друг от друга (один массив может быть пустым, а другой заполнен результатами исследований). Мне нужно знать, из какого индекса данные хранятся в этих поисковых массивах. Если я знаю, что данные в search_producttitle поступают из индексов 1,3 и 4 из price_producttitle (исходный массив), то я могу использовать эти числа для отображения indexPath.row. По крайней мере, это мой план на данный момент — создать массив searchResult, содержащий числа, которые следует использовать в objectAtIndex при создании ячейки.

Я борюсь с этим, я не могу найти примеров, когда они ищут в нескольких массивах, потому что ячейки состоят из нескольких массивов.

Может ли кто-нибудь дать мне подсказку в хорошем направлении или примеры, которые я могу использовать?

Заранее спасибо.

Прастоув

Ссылки, которые я использовал:

SearchDisplayController ищет несколько массивов

http://ygamretuta.me/2011/08/10/ios-implementing-a-basic-search-uisearchdisplaycontroller-and-interface-builder/


person Prastow    schedule 06.07.2012    source источник


Ответы (1)


Хотя никто не ответил на мой вопрос, я разобрался сам.

На самом деле, я думал слишком сложно. Я хотел использовать NSPredicate, который в моем случае не был необходим. Я хотел сначала получить строку из NSPredicate, а затем сравнить строку. Теперь я использую rangeofstring в цикле для каждого объекта с индексом, я делаю это для каждого массива.

Если он найден в массиве, сообщите YES, и индекс будет помещен в другой массив. Этот массив будет использоваться позже при создании UITableView, заменяя indexPath.row.

[self.searchResults removeAllObjects];

for (int i = 0; i < [temp_category count]; i++) {
    BOOL foundResult = FALSE;

    if ([[temp_category objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
        foundResult = TRUE;
    }
    if ([[price_producttitle objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
        foundResult = TRUE;
    }
    if ([[price_type objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
        foundResult = TRUE;
    }
    if ([[price_description objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
        foundResult = TRUE;
    }
    if (foundResult) {

        NSNumber *result = [NSNumber numberWithInt:i];
        if ([self searchResults] == nil) {
            NSMutableArray *array = [[NSMutableArray alloc] init];
            [self setSearchResults:array];
            [array release];
        }

            [searchResults addObject:result];

    }
}

NSLog (@"array = %i", [searchResults count]);
NSLog(@"%@",searchResults);

Я не беру кредиты за этот ответ. Кредиты должны быть отправлены на: SearchDisplayController поиск нескольких массивов

Я взял этот метод и реализовал его в -(void)searchtableview. Я должен отметить, что вопросов по этому поводу не так много, и это был единственный подходящий ответ, который я смог найти.

Я надеюсь, что другие найдут это полезным!

person Prastow    schedule 08.07.2012