Есть ли какой-нибудь способ хранить индексы объектов, проходящих тест, отличный от NSIndexSet?

У меня есть таблица и панель поиска. Таблица генерируется из БД SQLite, и панель поиска ищет эти объекты. Проблема, с которой я столкнулся, заключалась в том, что когда я хотел узнать, каков индекс результата поиска, если я просто посмотрел на массив результатов поиска и сравнил со строками моей таблицы БД, он не смог бы учесть дублирующиеся записи (http://stackru.com/questions/11617247/how-can-i-figure-out-what-uitableviewcell-im-clicking-on-during-a-search), поэтому я реализовал метод, используя indexesOfObjectsPassingTest (Http://stackru.com/questions/11674498/how-can-i-determine-the-index-of-an-object-in-an-nsmutablearray-when-i-search-fo).

Проблема в том, что я получаю NSIndexSet в качестве результата. Я хочу иметь возможность запрашивать это так же, как и NSMutableArray, но я знаю, что это невозможно, поэтому я перечисляю IndexSet, который вызывает серьезные проблемы с памятью, поскольку существует более 5000 возможных результатов. Есть лучший способ сделать это? Мне нужно определить, какие элементы являются результатами поиска, а затем какой конкретный результат я рассматриваю в таблице.

//when the user searches, this function is called:
- (void) getGrapeMatches {
    numSearchGrapes=0;
    listOfTheGrapeIDs = [[NSMutableArray alloc] init];
    for (NSString *str in listOfGrapes)
    {
        NSRange titleResultsRange = [str rangeOfString:searchBar.text options:NSCaseInsensitiveSearch];
        if (titleResultsRange.length > 0) {
            [searchResult addObject:str];
            numSearchGrapes++;
        }
    }
    BOOL (^test)(id obj, NSUInteger idx, BOOL *stop);

    test = ^ (id obj, NSUInteger idx, BOOL *stop) {

        if ([searchResult containsObject: obj]) {
            return YES;
        }
        return NO;
    };

    //this is the part that takes forever because I have over 5000 items in listOfGrapes
    NSIndexSet *indexes = [listOfGrapes indexesOfObjectsPassingTest:test];
    NSUInteger index=[indexes firstIndex];
    while(index != NSNotFound)
    {
        NSString *tempString = [NSString stringWithFormat:@"%d",index];
        [listOfTheGrapeIDs addObject:tempString];
        index=[indexes indexGreaterThanIndex: index];
    }
}

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

1 ответ

Решение

Репост в качестве ответа:

Не уверен, что я полностью понимаю - но не может ли ваша база данных напрямую вернуть интересующие вас результаты с помощью SQL-запроса? Теперь у вас есть объекты, соответствующие вашему запросу.

Другие вопросы по тегам