试图关闭故事板呈现的弹出窗口

Trying to dismiss a popover that was presented by storyboard

我在 SO 上看到很多关于此的问题,但他们的回答对我没有任何帮助。

我正在使用故事板展示弹出窗口。过了一会儿,我想以编程方式关闭该弹出窗口。

我尝试了很多东西,但最后一次尝试涉及为弹出框内的视图控制器创建一个 class。 class 是这样的:

- (id)initWithCoder:(NSCoder *)aDecoder {
  self = [super initWithCoder:aDecoder];
  if (self) {
    [self initializeNotification];
  }
  return self;
}


- (void) initializeNotification {
  [[NSNotificationCenter defaultCenter]
   addObserverForName:@"closePopover"
   object:self
   queue:[NSOperationQueue mainQueue]
   usingBlock:^(NSNotification * _Nonnull note) {
     [self dismissViewControllerAnimated:YES completion:nil];
   }];
}

然后,从主代码我 post 一个像

这样的通知
  [[NSNotificationCenter defaultCenter]
    postNotificationName:@"closePopover"
                  object:self];

没有任何反应...弹出窗口继续存在。

为什么?

在创建通知观察器时,您必须将 self 替换为 nil(对于 object 参数),因为发布通知的不是 self

[[NSNotificationCenter defaultCenter] addObserverForName:@"closePopover" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
    [self dismissViewControllerAnimated:YES completion:nil];
}];