为了账号安全,请及时绑定邮箱和手机立即绑定

ViewController responsesToSelector:消息发送到释放实例

ViewController responsesToSelector:消息发送到释放实例

iOS
跃然一笑 2019-12-10 09:52:23
好的,这是交易,我讨厌提出有关调试和崩溃的问题。因为我平时处理他们自己,但我不能让我的身边这样一来,即使在已经观看多个问题。好的,所以这是问题所在,我在此堆栈跟踪中随机打开和关闭我的应用程序:*** -[ViewController respondsToSelector:]: message sent to deallocated instance 0x1e5d2ef0在哪里ViewController可以有所不同,有时会在我的代码崩溃的地方,有否关联到特定的ViewController和并不拥有或调用它。另外,要获得该控制台的跟踪信息,我已经启用了Zombies,否则我将完全不获得任何控制台打印信息,而只会得到:objc_msgSend,这意味着我正在传递已发布的消息。但是我找不到那儿...我真的被卡住了!通常,我总是调试崩溃,所以我真的很坚持。同样,它在不同时间,不同时间在不同位置崩溃。和它崩溃的地方几乎没有任何关系ViewController。我觉得这很令人困惑。您需要我的任何代码吗?我有很多文件,由于它在不同地方崩溃,因此分发我的代码会很麻烦!我尝试添加没有运气的符号断点,并且iOS的Instruments应用程序上没有Zombies。我无法在模拟器上运行我的应用程序,因为它具有不支持的架构框架。感谢大家...
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

有类似的问题。在我的情况下,viewController需要获取navigationController事件,因此它正在注册为导航控制器委托:


 self.navigationController.delegate = self;

当该控制器被取消分配但仍然是视图控制器的委托时,发生崩溃。在dealloc中添加以下代码无效:


-(void) dealloc

{

    if (self.navigationController.delegate == self)

    {

        self.navigationController.delegate = nil;

    }

因为在调用dealloc的那一刻,视图控制器已经从视图层次结构中删除,所以self.navigationController为nil,所以比较肯定会失败!:-(


解决方案是添加此代码以检测VC是否在实际离开视图层次结构之前就离开了视图层次结构。它使用iOS 5中引入的方法来确定何时弹出视图而不将其推入


-(void) viewWillDisappear:(BOOL) animated

{  

   [super viewWillDisappear:animated];

   if ([self isMovingFromParentViewController])

   {

      if (self.navigationController.delegate == self)

      {

           self.navigationController.delegate = nil;

      }

   }

}


查看完整回答
反对 回复 2019-12-10
  • 3 回答
  • 0 关注
  • 451 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信