UISearchBarとUITableViewを持つUIViewControllerがあります。テーブルビューは、最近の検索を表示するために使用されます。
NSUserDefaultsを使用して検索テキストを保存しています。
これが私がしていることです:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
DLog(@"Search")
NSString *searchText = [self.searchBar text];
[self.recentSearchesDict setObject:searchText forKey:searchText];
self.recentSearchesStrings = [[self.recentSearchesDict allValues] mutableCopy];
[self saveRecentSearches];
[self.recentSearchList reloadData];
}
テーブルビューでのエントリの重複を避けるために、キーと同じテキストを使用してテキストオブジェクトをNSMutableDictionaryに保存します。
と:
- (void)saveRecentSearches
{
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
if (self.recentSearchesDict) {
[currentDefaults setValue:self.recentSearchesDict forKey:@"recentSearchesArray"];
}
}
NSMutableDictionaryをNSUserDefaultsに保存します。
viewDidLoadで私はこれを呼んでいます:
- (void)loadRecentSearches
{
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
self.recentSearchesDict = [[currentDefaults objectForKey:@"recentSearchesArray"] mutableCopy];
if (!self.recentSearchesDict) {
self.recentSearchesStrings = [[NSMutableArray alloc] init];
self.recentSearchesDict = [NSMutableDictionary dictionary];
return;
}
self.recentSearchesStrings = [[self.recentSearchesDict allValues] mutableCopy];
}
テーブルビューにデータを入力するために、NSMutableArrayオブジェクトrecentSearchesStringsを使用しています。
問題は、配列がディクショナリからすべての値を取得するときに、それらが最新の順序ではないことです。
リストの一番上に最新のものを表示したい。
何か助けはありますか?目的のタスクを達成するための他のより良いアプローチはありますか?