テーブルと検索バーがあります。テーブルは SQLite DB から生成され、検索バーはそれらのオブジェクトを検索します。私が抱えていた問題は、検索結果のインデックスが何であるかを知りたいときでした。検索結果の配列を見て、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-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
後で表のセルでどのアイテムを見ているかを理解する方法であるため、持っていることに依存しています。これを行う簡単な方法があればいいのにと思います。この問題を理解するのに役立つコードがさらに必要かどうか教えてください。