我有一張桌子和一個搜索欄。該表是從SQLite數據庫生成的,搜索欄搜索這些對象。我遇到的問題是,當我想知道搜索結果的索引是什麼時,如果我只查看搜索結果數組並與我的數據庫錶行進行比較,則無法解釋重複的條目(http:// stackoverflow.com/questions/11617247/how-can-i-figure-out-what-uitableviewcell-im-clicking-on-during-a-search),然後我實現了一個使用indexesOfObjectsPassingTest
(http:// stackoverflow。 COM /問題/ 11674498 /如何-可以-I-確定最索引的-AN-對象在-AN-的NSMutableArray-時-I-搜索-FO)。有沒有一些方法可以存儲傳遞非NSIndexSet測試的對象的索引?
現在的問題是,我得到一個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
,因爲它是我找出我的表單元格在看以後什麼項目的方式。我只是希望有一個更簡單的方法來做到這一點。讓我知道是否需要更多的代碼來幫助理解這個問題。
不知道我完全理解 - 但不能直接使用SQL查詢返回感興趣的結果嗎?現在你有與你的搜索詞匹配的對象。 – nielsbot 2012-07-27 20:52:09
而不是存儲每個索引的字符串化(?!)版本,爲什麼不只是將'listOfGrapes'過濾爲只有那些通過測試的對象? – 2012-07-27 20:53:22
好了,現在我想知道爲什麼我沒有想到在使用SQL查詢之前。明智而完全明顯的解決方案。謝謝!!! – lemontwist 2012-07-27 20:57:23