添加UIViewController对象作为NSNotification的观察者(全部来自另一个UIViewController)

时间:2016-12-02 06:02:27

标签: ios objective-c uiviewcontroller nsnotificationcenter nsnotification

标题可能会让你失望,但这就是我想要做的事情。

目前,我可以成功地从NSNotificationWinViewController广播LevelViewController条消息。在viewDidLoad中调用LevelViewController时,我有以下内容:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(updateLevel:)
                                                 name:@"winToLevel" 
                                               object:nil];

但是,我想在名为MainViewController的层次结构中的第一个视图控制器中编写此方法。这就是我到目前为止所拥有的:

- (IBAction)run:(id)sender {
      LevelViewController *levelVC = [[LevelViewController alloc] init];
     [[NSNotificationCenter defaultCenter] addObserver:levelVC
                                             selector:@selector(updateLevel:)
                                                 name:@"winToLevel" object:nil];
     // create a GameViewController instance
     // push levelVC on the stack without calling viewDidLoad
     // push the GameViewController instance on the stack and call viewDidLoad
}

LevelViewController实例的意图将是观察者,即使(我之前设置它的方式)viewDidLoad也不会被调用。当我在堆栈上推送WinViewController时,应该向LevelViewController发送通知,并且应该调用updateLevel:

我在updateLevel:中写了LevelViewController的方法,目前在MainViewController我收到一条警告,说明updateLevel:是如何定义的。这是有道理的,但如果我确实在MainVC中定义了它,LevelVC仍然可以成为观察者,WinVC会向LevelVC发送通知,并LevelVC运行来自MainVC的方法(通过公共定义)?

它是满口的,但如果你得到了我想做的事情,请告诉我它是否可行,或者是否有更好的方法。不要问为什么我这样做是为了问为什么...问为什么如果你有一个想法,谢谢。

***********更新************

有4个视图控制器,按层次顺序排列:MainVCLevelVCGameVCWinVC。这就是我想要的:

  1. MainVC内,让LevelVC个实例成为通知的观察者。
  2. 此通知将从WinVC广播。
  3. updateLevel:的方法定义目前位于LevelVC,但由于我在NSNotificationCenter设置了MainVC消息,因此我在考虑{{1}应该在updateLevel:
  4. 中定义

    如果MainVC位于updateLevel:,我是否仍然可以从MainVCWinVC发送通知,并让其像LevelVC一样在{{{}}中运行1}}?

0 个答案:

没有答案