由于搜索显示控制器检测到僵尸,iOS 7应用程序崩溃

由于搜索显示控制器检测到僵尸,iOS 7应用程序崩溃,ios,iphone,objective-c,Ios,Iphone,Objective C,当NSZombieEnabled设置为YES时,我的应用程序在模拟器和设备上崩溃。在使用仪器进行分析后,我已将问题缩小到我正在使用的搜索显示控制器: 僵尸消息:一条Objective-C消息被发送到一个已解除分配的服务器 地址为0x1134fb730的“UIView”对象(僵尸) 事件类型∆ RefCt RefCt Timestamp Responsible Library Responsible Caller 16僵尸-1 00:25.897.720 UIKit-[UISearchDispla

NSZombieEnabled
设置为
YES
时,我的应用程序在模拟器和设备上崩溃。在使用
仪器进行分析后,我已将问题缩小到我正在使用的搜索显示控制器:

僵尸消息:一条Objective-C消息被发送到一个已解除分配的服务器 地址为0x1134fb730的“UIView”对象(僵尸)

事件类型∆ RefCt RefCt Timestamp Responsible Library Responsible Caller 16僵尸-1 00:25.897.720 UIKit-[UISearchDisplayController _清理搜索栏]

我在网上做了很多研究(包括搜索堆栈溢出),但没有找到确切的原因。大多数人建议将搜索显示控制器上的代理设置为
nil
on
viewwilldiscover
,我已经尝试过了

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.searchDisplayController.delegate=nil;
    self.searchDisplayController.searchBar.delegate=nil;
}

我非常感谢任何人提供的任何帮助或提示。

根据我阅读的内容判断,解决方案取决于您的searchDisplayController
@属性的特性

@属性(非原子,保留)-确保在viewDidUnload中取消UISearchDisplayController:

self.searchDisplayController = nil;
@property(nonatomic,strong)-从中,如果您尝试在属性为强的情况下关闭UISearchDisplayController,则可能会出现操作系统错误。因此,请确保:

  • @synthesis searchDisplayController;
    在.m文件中
  • 将searchDisplayController设置为
    IBOutlet
  • 如果这不起作用,请从头文件中发布
    searchDisplayController
    @属性声明


    另外,我认为您不需要关闭搜索栏代理。

    另一个可能的原因是,iOS 7.0.x中显然仍潜伏着一个bug,但在7.1中已修复,如下所述:

    (苹果开发者论坛链接-开发者会员资格要求)

    如果将UISearchBar添加到TableView的tableHeaderView中(如Apple的“Table Search”示例所示),则可能会发生这种情况,在这种情况下,解决方法是将其删除,并告诉UISearchDisplayController在状态栏中显示搜索栏:

    [self.searchDisplayController.searchBar removeFromSuperview];
    self.searchDisplayController.displaysSearchBarInNavigationBar = YES;
    

    唯一的缺点是它隐藏了表的标题,但至少不会崩溃。升级到7.1为我解决了这个问题。

    你在使用ARC吗?叮当声静态分析器告诉你什么?当你试图使用任何已经被释放的对象时,僵尸就来了。布莱恩:是的,我在使用ARCmanthan:我意识到我得到了一个僵尸e基于我在仪器中看到的内容,但我如何着手解决此问题?请帮助尝试从您的视图中删除代码将消失并检查您是否仍然收到此错误?感谢用户740474,我相信您已经解决了我的问题,您的解决方案工作得非常好,非常感谢您的帮助!!!