当我注释掉...

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


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

但是,当我取消注释它以便它实际上在我的代码中运行时,我的应用程序可以正常运行一次,但是我第二次尝试重复它-它根本不会触发。

有人告诉我确保“ removeObserver”,但是当我这样做时,我的应用程序将按预期停止工作,那么我是否要摆脱此removeObserver代码?还是有其他方法可以解决这个问题?

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

最佳答案

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

- (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];
}


这样,您就不会因为观察者不在屏幕上而使他们无法响应。

10-04 13:59