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

好的,这是交易,我讨厌提出有关调试和崩溃的问题。因为我平时处理他们自己,但我不能让我的身边这样一来,即使在已经观看多个问题。


好的,所以这是问题所在,我在此堆栈跟踪中随机打开和关闭我的应用程序:


*** -[ViewController respondsToSelector:]: message sent to deallocated instance 0x1e5d2ef0

在哪里ViewController可以有所不同,有时会在我的代码崩溃的地方,有否关联到特定的ViewController和并不拥有或调用它。


另外,要获得该控制台的跟踪信息,我已经启用了Zombies,否则我将完全不获得任何控制台打印信息,而只会得到:objc_msgSend,这意味着我正在传递已发布的消息。但是我找不到那儿...我真的被卡住了!通常,我总是调试崩溃,所以我真的很坚持。


同样,它在不同时间,不同时间在不同位置崩溃。和它崩溃的地方几乎没有任何关系ViewController。我觉得这很令人困惑。


您需要我的任何代码吗?我有很多文件,由于它在不同地方崩溃,因此分发我的代码会很麻烦!


我尝试添加没有运气的符号断点,并且iOS的Instruments应用程序上没有Zombies。我无法在模拟器上运行我的应用程序,因为它具有不支持的架构框架。


感谢大家...


跃然一笑
浏览 453回答 3
3回答

繁花不似锦

有类似的问题。在我的情况下,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;      }   }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS