如何确定一个对象在一个NSMutableArray索引,当我搜索内它的NSString?(How c

2019-10-17 01:54发布

目前我使用的编码从在随即出现在表格中的DB数据一个UISearchBar的搜索能力。 我想出了搜索结果,并将它们保存到NSMutableArray *searchResults 。 下面是如何看起来:

- (void) searchGrapesTableView {
    [searchResult removeAllObjects];
    numSearchWines=0;
    for (NSString *str in listOfWines)
    {
        NSRange titleResultsRange = [str rangeOfString:searchBar.text options:NSCaseInsensitiveSearch];
        if (titleResultsRange.length > 0) {
            [searchResult addObject:str];
            numSearchWines++;
        }
    }
}

listOfWines也是包含了所有可从搜索的名称列表一个NSMutableArray。 理想情况下,我想确定对象的索引listOfWines具有匹配值,并将它添加到另一个NSMutableArray的,所以这样我可以在以后真的很容易地访问它。 例如,后当我使用这个搜索数据显示表上的细胞,我有以下代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"wineCell"];
    //determine how many to add to get the grape ID
    NSInteger grapeID=0;
    for (int i=0; i<indexPath.section; i++) {
        grapeID += [self.tableView numberOfRowsInSection:i];
    }

    Wines *currentWine;
    if (isSearchOn) {
        NSString *cellValue = [searchResult objectAtIndex:(grapeID+indexPath.row)];
        NSInteger index = 0;
        index = [listOfWines indexOfObject:cellValue];
        currentWine = [allWines objectAtIndex:(index)];
    }

    else {
        currentWine = [allWines objectAtIndex:(grapeID+indexPath.row)];
    }

    cell.textLabel.text = currentWine.name;
    return cell;
}

不幸的是,如果有重复的记录,这并不工作listOfWines (以及随后searchResult )。 这就是为什么它会这么有用的也有他们的索引中,例如,一个NSMutableArray命名searchResultID ,这样我可以做这样的事情:

NSInteger theResultID = [searchResultID objectAtIndex:(grapeID+indexPath.row)];
currentWine = [allWines objectAtIndex:theResultID];

Answer 1:

这听起来像indexesOfObjectsPassingTest工作:。 你应该看看在NSArray的文档。 您可以使用它是这样的:

NSIndexSet  *indxs = [allWines indexesOfObjectsPassingTest: ^BOOL(NSString *obj, NSUInteger idx, BOOL *stop) {
        return [obj isEqualToString:searchBar.text]];
    }];

所以,在所有的值,会有环路allWines(我假设的对象都是字符串),并返回的任何匹配搜索字符串,让你发现任何索引设置索引的索引。



文章来源: How can I determine the index of an object in an NSMutableArray when I search for a NSString within it?