2017-03-03 58 views
2

我有两个类,它们使用NSNotification来相互通信。即使只添加观察者一次也会发出两次通知

目前,我有一个问题,通知被解雇两次,我已经双倍/三倍/甚至更多的检查观察员没有被添加超过1次,通知没有被发布两次,全球搜索我的项目相同通知。

我的代码是像下面


新增通知观察

[[NSNotificationCenter defaultCenter] removeObserver:self name:notification_deleteMediaFromGallery object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationReceiver:) name:notification_deleteMediaFromGallery object:nil]; 

通知接收器

- (void)notificationReceiver:(NSNotification*)notification { 
    if ([notification.name isEqualToString:notification_deleteMediaFromGallery]) { 
     if ([[notification.userInfo objectForKey:@"kind"] integerValue]==GalleryKindPhoto) { 
      //My statements 
     } 
     else if ([[notification.userInfo objectForKey:@"kind"] integerValue]==GalleryKindVideo) { 
      //My statements 
     } 
    } 
} 

邮政通知

dispatch_async(dispatch_get_main_queue(), ^{ 
    [_browser reloadData]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:notification_deleteMediaFromGallery object:nil userInfo:@{@"index":@(_browser.currentIndex), @"kind":@(self.kind), @"function":[NSString stringWithFormat:@"%s",__PRETTY_FUNCTION__]}]; 
}); 

我也通过EmptyStack试图this solution但不能让它开始工作。

如果你能帮我解决这个问题,我将非常感谢你。

感谢。

编辑

注意

我在我viewDidLoad中添加的观察者,并不能从viewwillappera/viewWillAppear中添加/删除观察者或viewdidappear/viewdiddisappear因为下一个视图 - 控制将要上推当前viewcontroller会发布通知

+0

可以是U曾尝试这一点,但你能告诉我们发生了什么,你在这两个地方增加一些打印语句之后;一个在哪里你的帖子和一个你在哪里注册 – humblePilgrim

+0

@humblePilgrim是的我曾尝试过,它记录了一次我发布我的通知,但在接收器中它记录了两次,地址号码相同的通知 –

+0

我会在约一个小时内发布通知日志 –

回答

0

我认为你需要在你的视图控制器中写入dealloc方法。并删除所有通知观察员dealloc方法,

- (void)dealloc 
{ 
    // Deregister observer 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:notification_deleteMediaFromGallery object:nil]; 
} 
+0

嗯,感谢您的答复,但我不认为dealloc方法将被调用,因为这些类是我的viewcontrollers,回弹将调用' - (void)viewWillDisappear :(BOOL)animated'和' - (void)viewDidDisappear:(BOOL)animated'。顺便说一句,我在脑海里有另一个提示,让我试试看 –

+0

根据我的知识,你需要在ViewDidLoad()方法中添加addObserver,并在dealloc方法中删除它。如果你想在viewDidDisappear中删除,那么你需要在viewWillappear方法中为addObserver编写代码。 –

+0

没有好友,我在我的'viewDidLoad'中添加了观察者,并且我不能在'viewdiddisappear'中删除观察者,因为下一个viewcontroller会发布通知。是的,dealloc方法永远不会被调用,因为dealloc被调用时,对象完全从内存中删除,更多清除请[请查看此答案](http://stackoverflow.com/a/30332523/3308174) –

-2
Hi please make sure your method is not calling two time from where you are firing notification. 

& please add your notification observer in viewWillDisappear method. 
+0

请澄清您的回答 –

+0

现在用你自己的方法解决它:D – morroko

+0

没问题好友,我会,可能现在或以后 –

相关问题