Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 内存警告后,如何重新加载内置故事板的searchDisplayController?_Ios_Memory Management_Uitableview_Uisearchdisplaycontroller_Uistoryboard - Fatal编程技术网

Ios 内存警告后,如何重新加载内置故事板的searchDisplayController?

Ios 内存警告后,如何重新加载内置故事板的searchDisplayController?,ios,memory-management,uitableview,uisearchdisplaycontroller,uistoryboard,Ios,Memory Management,Uitableview,Uisearchdisplaycontroller,Uistoryboard,此项目适用于使用ARC和Core数据的iOS5 iPhone 所有内置的Xcode情节串连板,我有一个带有几个选项卡的UITabBarController。其中三个视图是带有UISearchDisplayController附件的UITableViewController。如果我在iPhone模拟器中模拟内存警告,任何未激活的视图都会被转储,当我使用searchDisplayController点击其中一个视图的选项卡时,NSZombieEnabled会告诉我-[UISearchDisplayC

此项目适用于使用ARC和Core数据的iOS5 iPhone

所有内置的Xcode情节串连板,我有一个带有几个选项卡的
UITabBarController
。其中三个视图是带有
UISearchDisplayController
附件的
UITableViewController
。如果我在iPhone模拟器中模拟内存警告,任何未激活的视图都会被转储,当我使用searchDisplayController点击其中一个视图的选项卡时,NSZombieEnabled会告诉我
-[UISearchDisplayController retain]:发送到解除分配实例的消息

这是我的
-didReceiveMemoryWarning

- (void)didReceiveMemoryWarning
{
    [(PahAppDelegate *)[[UIApplication sharedApplication] delegate] saveContext];
    // Release any cached data, images, etc that aren't in use.
    self.searchWasActive = [self.searchDisplayController isActive];
    self.savedSearchTerm = [self.searchDisplayController.searchBar text];
    self.savedScopeButtonIndex = [self.searchDisplayController.searchBar selectedScopeButtonIndex];

    self.fetchedResultsController.delegate = nil;
    self.fetchedResultsController = nil;
    self.searchFetchedResultsController.delegate = nil;
    self.searchFetchedResultsController = nil;

    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
}
我最好的猜测是,
UITableViewController
也会转储子视图,无论出于何种原因,当我返回到其他选项卡时,它不会重新创建它们。由于所有这些功能都内置在故事板中,我不太确定如何请求它重新加载所讨论的
searchDisplayController

注意:我从未见过应用程序在现实世界中在设备上这样做 (我的测试人员也没有),但我不想让苹果拒绝 因此批准应用程序;再加上修好它看起来就像 做正确的事


searchDisplayController
是一个只读属性,所以我不确定应该采取什么策略来加载它们。

这显然像是一个可能是情节提要的bug。正如这里所提到的:,一个使用故事板和UISearchDisplayController的全新项目可以复制这个特性,而无需将UISearchDisplayController的插座连接到您的控制器中。该线程中的建议似乎是合理的,在代码中创建UISearchDisplayController。我无法保证解决方案的有效性,因为我没有测试它,但我很好奇,确实复制了新的project=crash索赔,并看到了完全相同的事情。

我得出了相同的结论。我自己构建了一个示例测试项目,只是在故事板中进行布局,没有添加任何自定义代码,它仍然可以复制。请看,似乎这可能是一个错误的故事板。通过在代码中创建
UISearchDisplayController
暂时解决了这个问题,正如Brian Cooke在下面建议的那样。