这是一个示例,说明如何使用SearchDisplayController对表进行搜索。
与我的问题相关的代码是:
- (void)viewDidLoad { self.title = @"Products"; // create a filtered list that will contain products for the search results table. self.filteredListContent = [NSMutableArray arrayWithCapacity:[self.listContent count]]; // restore search settings if they were saved in didReceiveMemoryWarning. if (self.savedSearchTerm) { [self.searchDisplayController setActive:self.searchWasActive]; [self.searchDisplayController.searchBar setSelectedScopeButtonIndex:self.savedScopeButtonIndex]; [self.searchDisplayController.searchBar setText:savedSearchTerm]; self.savedSearchTerm = nil; } [self.tableView reloadData]; self.tableView.scrollEnabled = YES;
-(void)viewDidDisappear:(BOOL)animated { // save the state of the search UI so that it can be restored if the view is re-created self.searchWasActive = [self.searchDisplayController isActive]; self.savedSearchTerm = [self.searchDisplayController.searchBar text]; self.savedScopeButtonIndex = [self.searchDisplayController.searchBar selectedScopeButtonIndex]; }
因此,它表示它正在保存搜索UI的状态,以便在重新创建视图时可以恢复它。
它还说“如果它们保存在didReceiveMemoryWarning中,它会恢复搜索设置。”
所以我的理解是,当内存不足时,可能会卸载此视图。当用户单击该选项卡以查看该视图时,可能会再次重新创建它。
所以我想模拟我的视图被卸载的低内存情况,这样我就可以确认搜索术语恢复的逻辑是否有效。但我失败了。
总结我的问题:
答案 0 :(得分:0)
我不能对这个答案持肯定态度,但根据我的经验,它可以这样运作。
如果您的UIViewController注册为UITabBarController的viewControllers之一,并且UITabBarController是UIWindow的rootViewController,则应将内存警告转发给您的UIViewController。如果不是,我相信有一个缺失的过渡。要找出位置,你可以将每个UIViewController从rootViewController NSLog到你想要的UIViewController,看看它停在哪里。
现在,如果你想测试你的UIViewController的didReceiveMemoryWarning,你可以在加载另一个View或使用计时器时自己调用该方法。