Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSNotificationCenter删除导致问题的观察者_Ios_Iphone_Objective C_Nsnotificationcenter - Fatal编程技术网

Ios NSNotificationCenter删除导致问题的观察者

Ios NSNotificationCenter删除导致问题的观察者,ios,iphone,objective-c,nsnotificationcenter,Ios,Iphone,Objective C,Nsnotificationcenter,当我发表评论时 // [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LoadRequestFromAppDel" object:Nil]; …我的应用程序按预期工作,通知中心一次又一次地工作 但是,当我取消注释它时,它实际上在我的代码中运行,我的应用程序将正常工作一次,但第二次我尝试重复它-它根本不会触发 我被告知要确保“removeObserver”,但当我这样做时,我的应用程序会停止按预期工作,所以我是否要

当我发表评论时

// [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LoadRequestFromAppDel" object:Nil];
…我的应用程序按预期工作,通知中心一次又一次地工作

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

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


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

删除observer就可以做到这一点。在您的情况下,您希望继续观察,以便能够删除该行


我建议将这行代码移到dealloc方法内部。

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

当视图出现时,需要观察:

- (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];
}
这样,你就不会让观测者因为不在屏幕上而无法做出反应