我的NSNotification延迟了。
在myVC中,我有两个按钮,buttonA和buttonB。每个都链接到各自的pdf,pdfA和pdfB。按下按钮,按下A或B后按下按钮。 Push将用户带到RVC,其中有一个UIWebView。
我想要它,以便通过按A或B,UIWebView将显示相应的pdf文件。为了调试它,我将其设置为不使用更改pdf,而是使用NSLog显示文本。但是,在通过按下其他按钮从RVC返回myVC之后,它才能工作。
在myVC.m文件中:
- (IBAction)open_pictures_A:(id)sender
{
//do some button alert popup action/whatever button does
RootViewController *dataObject = [RootViewController new];
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:dataObject
forKey:@"buttonA"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification"
object:nil
userInfo:userInfo];
}
还有一个类似于buttonB,但forKey将是" buttonB"
在myVC.m的viewDidLoad中我有
[[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification"
object:nil];
在我的RVC中,
RVC.h我有
@property (nonatomic, strong) NSString *property1;
在RVC.m我有
- (void)viewDidLoad
{
// other stuff
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(eventListenerDidReceiveNotification:)
name:@"MyNotification"
object:nil];
}
- (void)eventListenerDidReceiveNotification:(NSNotification *)notif
{
if ([[notif name] isEqualToString:@"MyNotification"])
{
NSLog(@"Successfully received the notification from buttonB!");
NSDictionary *userInfo = notif.userInfo;
RootViewController *dataObject = [userInfo objectForKey:@"buttonB"];
// Your response to the notification should be placed here
NSLog(@"dataObject.property1 -> %@", dataObject.property1);
}
}
但是,当我按下一个按钮退出RVC回到myVC时,日志条目才会显示
这是我用来从mVC到RVC的代码
-(IBAction)goToRVC{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
RootViewController *RVC = [storyboard instantiateViewControllerWithIdentifier:@"Root"];
[UIApplication sharedApplication].delegate.window.RootViewController = RVC;
}
然后从RVC到myVC
-(IBAction)backtomyVC{
[[[UIApplication sharedApplication] delegate] performSelector:@selector(myVC)];
[self disconnect];
}
为什么我的通知操作会被延迟?
答案 0 :(得分:0)
这不是因为延迟。 当您按下按钮A或B时,您创建了新的RVC对象并发布了通知,但是您不会出现/推送RVC视图控制器(您只是初始化它),因此RVC没有触发viewDidLoad方法并且它并没有将自己注册为观察者。
之后,调用goToRVC方法创建RVC对象,然后将其添加到视图层次结构中,以便调用viewDidLoad方法,并将对象注册为观察者。
当您返回mVC时,RVC尚未解除分配,因此它会收到通知,您可以看到日志。
希望它清楚。