NSNotificationCenter removeObserver导致问题

时间:2014-01-03 03:57:31

标签: ios iphone objective-c nsnotificationcenter

当我发表评论时......

// [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LoadRequestFromAppDel" object:Nil];

...我的应用按预期工作,通知中心一次又一次地工作。

但是当我解除它,所以它实际上在我的代码中运行,我的应用程序将正常工作,但第二次我尝试重复它 - 它根本不会触发。

我被告知确保“removeObserver”,但是当我这样做时,我的应用程序停止按预期工作,所以我只是摆脱这个removeObserver代码?或者有不同的方法来处理这个问题吗?

(我的应用正在检测urlscheme://是pushtap://然后它通过通知中心将url发送到另一个视图,然后它在完成后尝试removeObserver ...问题是,它只是这样做有一次,如果我添加了removeObserver,第二次尝试使用pushtap://来自safari,它根本不再运行代码 - 除非我摆脱上面显示的removeObserver行。)

3 个答案:

答案 0 :(得分:1)

当您不再需要侦听该通知时,需要调用removeObserver,如果在viewController消失时执行此操作,则需要在再次出现时重新添加观察者。

答案 1 :(得分:0)

删除观察者就是这样做的。在您的情况下,您希望继续观察,以便您可以删除该行。

我建议将那行代码移到你的dealloc方法中。

答案 2 :(得分:0)

您需要观察视图何时出现:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mySelector:) name:@"MyNotification" object:nil];
}

然后你可以在视图消失时删除你的观察者:

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];

    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

这样你就不会留下无论如何都无法回应的观察者,因为他们不在屏幕上。