目前我使用的编码从在随即出现在表格中的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];