【问题标题】:Observer is calling multiple times观察者多次调用
【发布时间】:2015-11-05 09:14:05
【问题描述】:

我在 viewdidload 中添加观察者 -

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

但每次我打开视图时,它都会添加观察者。如何管理?

【问题讨论】:

  • 如果您在viewDidLoad 中添加观察者,您应该在dealloc 方法中删除观察者。
  • 不知道 dealloc 没有调用。

标签: objective-c ios8 ios9 observers


【解决方案1】:
  - (void)viewWillDisappear:(BOOL)animated {

    [[NSNotificationCenter defaultCenter] removeObserver:self name:aName object:nil];

   }

  - (void)viewWillAppear:(BOOL)animated {

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(aMethod) name:aName object:nil];
}

【讨论】:

  • viewWillDisappear 不是删除观察者的正确位置,如果您将观察者添加到viewDidLoad。视图可能会消失几次而不会再次加载视图,这将尝试删除不存在的观察者导致崩溃。
  • 此答案假定仅应在视图控制器处于视图中时处理通知。根据视图控制器的需要,这可能不合适。
  • 如果需求更具体,会修改答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多