1

我有一个标签栏应用程序,其中有2个选项卡(2个视图控制器)。我需要从标签2(视图控制器2)向标签1(视图控制器1)发布通知。但问题是,我必须首先去标签1(视图控制器1)为了注册通知,如果我不这样做,通知从未注册。看来只有一次选择它才分配视图,然后移动到标签2(视图控制器2)发布通知。NSNotification register place issue

在寄存器通知在viewDidLoad中和viewWillAppear中是这样的:

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

那么,怎样才能i避免第一选择选项卡1(视图控制器1),然后发布通知从标签2(视图控制器2)?

谢谢!

+0

处理通知的类应该始终处于活动状态。我的建议是依靠另一个类,比如你的应用程序委托,它在适当的时候处理通知并与视图控制器通信。 – 2013-05-03 18:00:24

+0

顺便说一句你用的故事板? – 2013-05-04 12:03:56

+0

没有故事板... xib的 – user2268539 2013-05-06 07:49:48

回答

0

如果在标签中的视图控制器的情况下说的appDelegate你尝试这样的事情在的applicationDidFinishLaunching

[[NSNotificationCenter defaultCenter] addObserver:tab1viewcontroller selector:@selector(createYourOwnPressed:) name:@"createYourOwnPressed" object:nil]; 

或做到这一点,同时加入视图控制器的UITabBarController

ViewController *vc=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:vc selector:@selector(createYourOwnPressed:) name:@"createYourOwnPressed" object:nil]; 
+0

但我不能访问appDelegate – user2268539 2013-05-03 07:36:13

+0

这个无关紧要的选择器。选择器发送给观察者,所以需要在那里声明和实现。 – Tobi 2013-05-03 07:53:52

+0

你的意思是我必须在appDelegate中声明并定义我的选择器? – user2268539 2013-05-03 08:02:51

0

如果你想在视图加载之前注册通知(viewDidLoad,viewDidAppear),我建议你注册视图控制器初始化(initWithNibName,init等),这样你就可以确定你的vc实例会得到通知秒。

否则,有一个小黑客来强制控制器加载视图,象下面这样:

MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[vc view]; // force view load 

然后只需将其插入到您的导航控制器。这样你就不必切换到第一个标签来加载视图。

+0

我没有发现任何提及的故事板。并且由分开的那个你意味着另一个观察者,我猜? – 2013-05-04 07:14:01