标题可能会让你失望,但这就是我想要做的事情。
目前,我可以成功地从NSNotification
向WinViewController
广播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个视图控制器,按层次顺序排列:MainVC
,LevelVC
,GameVC
,WinVC
。这就是我想要的:
MainVC
内,让LevelVC
个实例成为通知的观察者。WinVC
广播。updateLevel:
的方法定义目前位于LevelVC
,但由于我在NSNotificationCenter
设置了MainVC
消息,因此我在考虑{{1}应该在updateLevel:
。如果MainVC
位于updateLevel:
,我是否仍然可以从MainVC
向WinVC
发送通知,并让其像LevelVC
一样在{{{}}中运行1}}?