我有 UIViewController 有一个 UISearchBar 和 UITableView。表格视图用于显示最近的搜索。
我正在使用 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。
问题是当数组从字典中获取所有值时,它们的顺序不是最近的。
我希望最新的显示在列表顶部。
有什么帮助吗?还有其他更好的方法来完成所需的任务吗?