• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - NSNotificationCenter RemoveObserver 并不总是工作

[复制链接]
菜鸟教程小白 发表于 2022-12-12 11:50:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

通常我在 viewWillAppear 中添加我的观察者并在 viewWillDisappear 中删除它们。在这种情况下,即使在 View 消失后,我也需要其中一位观察者继续,以便它可以完成一些工作。为了确保观察者只在这个 View 中添加一次,我做了以下操作:

-(void)viewWillAppearBOOL)animated
{
    [super viewWillAppear:YES];

    [[NSNotificationCenter defaultCenter]removeObserver:self
                                                   name"imageSaved"
                                                 object:nil];

    [[NSNotificationCenter defaultCenter]addObserver:self
                                            selectorselector(postMessageWithImage
                                                name"imageSaved"
                                              object:nil];


}

我已经对应用程序的其余部分进行了搜索,以确保该观察者未在其他任何地方注册。不幸的是,有时,但并非所有时候,并且没有一致的因素,通知会被触发两次。我还通过断点和 NSLog 确保不会多次调用 postNotifcationName。我无法在 iPhone 上重现,因为问题似乎仅限于 iPad。

在进一步的故障排除中,我检查了该方法是否是从同一个线程调用的(没有理由不会,只是为了检查)。如果我将 removeObserver 放在 viewWillDisappear 中,这个问题就会消失,但是,这又不是我需要它工作的方式。

显然,这种情况的观察者被注册了两次,但我找不到原因。正如您从代码中看到的那样,任何时候注册此观察者时,它都会首先被删除。我唯一的另一个想法是 self 是否会“损坏”,从而 removeObserver 无法正常运行?



Best Answer-推荐答案


当 View 显示时添加你的观察者,当 View 消失时移除它。

添加:

- (void)viewDidLoad
{
  [[NSNotificationCenter defaultCenter]addObserver:self
                                            selectorselector(postMessageWithImage
                                                name"imageSaved"
                                              object:nil];
}

删除:

- (void)postMessageWithImageNSNotification*)aNotification
{
  [[NSNotificationCenter defaultCenter]removeObserver:self
                                                   name"imageSaved"
                                                 object:nil];
  // here do your job
}

这是完全有效和高效的。

关于ios - NSNotificationCenter RemoveObserver 并不总是工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883013/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap