我有一张桌子和搜索栏。该表是从SQLite DB生成的,搜索栏搜索这些对象。我遇到的问题是当我想知道搜索结果的索引是什么时,如果我只是查看搜索结果数组并与我的数据库表行进行比较,它就不能解释重复的条目(http: //stackoverflow.com/questions/11617247/how-can-i-figure-out-what-uitableviewcell-im-clicking-on-during-a-search),然后我使用indexesOfObjectsPassingTest
实现了一个方法( http://stackoverflow.com/questions/11674498/how-can-i-determine-the-index-of-an-object-in-an-nsmutablearray-when-i-search-fo)。
现在的问题是,我得到一个NSIndexSet作为我的结果。我希望能够查询这个,因为我可以使用NSMutableArray,但我知道它不可能,因此我列举了IndexSet,这会导致严重的内存问题,因为有超过5,000种可能的结果。有一个更好的方法吗?我需要确定哪些项目是搜索结果,然后确定我在表格中查看的特定结果。
//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
,因为这是我在以后查看表格单元格中的项目的方式。我只是希望有一个更简单的方法来做到这一点。如果有必要使用更多代码来帮助我理解这个问题,请告诉我。
答案 0 :(得分:1)
重新发布答案:
不确定我完全理解 - 但是您的数据库不能使用SQL查询直接返回感兴趣的结果吗?现在您拥有与搜索字词匹配的对象。