将NSZombieEnabled
设置为YES
,我的应用会在模拟器和设备上崩溃。在使用Instruments
进行性能分析后,我已将问题缩小到我正在使用的搜索显示控制器:
Zombie Messaged:一个Objective-C消息被发送到一个deallocated 'UIView'对象(僵尸)地址:0x1134fb730“
事件类型ΔRefCtRefCt时间戳负责人图书馆负责人16 Zombie -1 00:25.897.720 UIKit - [UISearchDisplayController _cleanUpSearchBar]
我已经在网上做了很多研究(包括搜索堆栈溢出),但还没有找到确切的原因。大多数人建议将搜索显示控制器上的代表设置为nil
上的viewWillDisappear
,我已经尝试过了。
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.searchDisplayController.delegate=nil;
self.searchDisplayController.searchBar.delegate=nil;
}
我非常感谢任何人提供的任何帮助或提示。
答案 0 :(得分:4)
另一个可能的原因是一个显然仍然潜伏在iOS 7.0.x中但在7.1中已修复的错误,如下所述:
https://devforums.apple.com/message/858259#858259(Apple dev论坛链接 - 需要开发会员资格)
如果您已将UISearchBar添加到TableView的tableHeaderView(如Apple的“表搜索”示例中所示),可能会发生这种情况,在这种情况下,解决方法是从那里删除它并告诉UISearchDisplayController显示搜索状态栏中的栏:
[self.searchDisplayController.searchBar removeFromSuperview];
self.searchDisplayController.displaysSearchBarInNavigationBar = YES;
唯一的缺点就是隐藏了表格的标题,但至少它没有崩溃。升级到7.1为我解决了问题。
答案 1 :(得分:1)
根据我所阅读的解决方案判断,取决于searchDisplayController @property
的特征。
@property(nonatomic,retain) - 确保你在viewDidUnload中找不到UISearchDisplayController:
self.searchDisplayController = nil;
@property(非原子的,强大的) - 来自this answer,如果您尝试在属性很强的情况下尝试淘汰UISearchDisplayController,则可能会出现操作系统错误。所以请确保你:
@synthesize searchDisplayController;
。IBOutlet
。如果这不起作用,请您从头文件中发布@property
searchDisplayController
声明吗?
此外,我认为您不需要让搜索栏代表无所适从。