ViewController respondsToSelector:]: 消息发送到释放的实例

Posted

技术标签:

【中文标题】ViewController respondsToSelector:]: 消息发送到释放的实例【英文标题】:ViewController respondsToSelector:]: message sent to deallocated instance 【发布时间】:2012-05-19 05:04:18 【问题描述】:

当我启用“僵尸对象”时,我收到此错误(“ViewController respondsToSelector:]: message sent to deallocated instance”)。我发现错误在哪里,但我不知道如何解决。

代码如下: ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UISearchDisplayDelegate, UISearchBarDelegate>


    // The saved state of the search UI if a memory warning removed the view.
    NSString        *savedSearchTerm;
    NSInteger       savedScopeButtonIndex;
    BOOL            searchWasActive;


@property (nonatomic, copy) NSString *savedSearchTerm;
@property (nonatomic) NSInteger savedScopeButtonIndex;
@property (nonatomic) BOOL searchWasActive;

ViewController.m

...
// when I comment out "viewDidDisappear" everything is ok, how to solve this on different way?
- (void)viewDidDisappear:(BOOL)animated

    // save the state of the search UI so that it can be restored if the view is re-created
    self.searchWasActive = [self.searchDisplayController isActive];
    self.savedSearchTerm = [self.searchDisplayController.searchBar text];
    self.savedScopeButtonIndex = [self.searchDisplayController.searchBar selectedScopeButtonIndex];
...

谢谢你的帮助

【问题讨论】:

你解决过这个问题吗?我也有同样的问题。 @EliGregory - 是的。我评论 viewDidDisappear :) 所以我没有重写那个方法,我得去别处看看 万一它是相关的,请查看这个类似的问题:***.com/questions/11170614/… 【参考方案1】:

你在做什么来“创造”这个错误?

在我的情况下,我将 ViewController 从导航堆栈中弹出,仍然有 NSNotifications 发送到这个 VC。我只是忘记删除我的 VC 的所有观察者。

【讨论】:

【参考方案2】:

您应该将 [super viewDidDisappear:animated] 放在覆盖的开头,因为这是默认实现。忘记那条线有时会导致问题。

编辑:

我认为您可能需要发布更多代码。关键可能在于您正在做或不做的其他事情。

【讨论】:

【参考方案3】:
/*
- (void)viewDidDisappear:(BOOL)animated

    // save the state of the search UI so that it can be restored if the view is re-created
    self.searchWasActive = [self.searchDisplayController isActive];
    self.savedSearchTerm = [self.searchDisplayController.searchBar text];
    self.savedScopeButtonIndex = [self.searchDisplayController.searchBar selectedScopeButtonIndex];

*/

【讨论】:

以上是关于ViewController respondsToSelector:]: 消息发送到释放的实例的主要内容,如果未能解决你的问题,请参考以下文章

ViewController 将结果返回给调用它的 ViewController [重复]

你如何将数据从 ViewController 传递到包含单独 ViewController 的 PageViewController,然后这些 ViewController 将使用这些数据?

需要从另一个viewController调用其他viewController中的方法

Xcode 10.1 ViewController.h 与 ViewController.swift

当 ViewController 被呈现的 ViewController 覆盖时触发事件

一个 viewController 被推入另一个 viewController 后会发生啥