gpt4 book ai didi

ios - 即使只添加一次观察者,通知也会被触发两次

转载 作者:行者123 更新时间:2023-12-01 17:11:27 29 4
gpt4 key购买 nike

我有两个使用 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__]}];
});

我也试过this solution通过 EmptyStack但无法正常工作。

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

谢谢。

编辑

注意

我在我的 viewdidload 中添加了观察者,并且无法从 viewwillappera/viewwillappear 或 viewdidappear/viewdiddisappear 添加/删除观察者,因为将推送到当前 viewcontroller 的下一个 viewcontroller 将发布通知

最佳答案

我认为您需要在 View Controller 中编写 dealloc 方法。并在 dealloc 方法中删除所有通知观察者,

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

关于ios - 即使只添加一次观察者,通知也会被触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42572247/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com