1. VC跳转,收不到通知
在SecondVC中:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor whiteColor];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(lookupTheInfo:) name:@"kFirstToSecondNotification" object:nil];
}
在FirstVC中一个点击事件:
- (void)buttonTouchUpInside:(id)sender {
RXNotificationSecondViewController *vc = [RXNotificationSecondViewController new];
[self.navigationController pushViewController:vc animated:YES];
NSDictionary *userInfo = @{
@"name":@"Notification",
@"age":@"18",
@"height":@"188cm"
};
[[NSNotificationCenter defaultCenter] postNotificationName:@"kFirstToSecondNotification" object:nil userInfo:userInfo];
}
因为SecondVC还没有注册,是无法收到通知。
所以可以改成:
- (void)buttonTouchUpInside:(id)sender {
RXNotificationSecondViewController *vc = [RXNotificationSecondViewController new];
[self.navigationController pushViewController:vc animated:YES];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSDictionary *userInfo = @{
@"name":@"Notification",
@"age":@"18",
@"height":@"188cm"
};
[[NSNotificationCenter defaultCenter] postNotificationName:@"kFirstToSecondNotification" object:nil userInfo:userInfo];
}];
}
2. VC跳转,SecondVC 需要单独处理一些事情
- (void)buttonTouchUpInside:(id)sender {
RXNotificationSecondViewController *secondVC = [RXNotificationSecondViewController new];
[self.navigationController pushViewController:secondVC animated:YES];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[secondVC doSomething];
}];
}
实际上,以上也可用如下的方法:
- (void)method3 {
RXNotificationSecondViewController *vc = [RXNotificationSecondViewController new];
[self.navigationController pushViewController:vc animated:YES];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSDictionary *userInfo = @{
@"name":@"Notification",
@"age":@"18",
@"height":@"188cm"
};
[[NSNotificationCenter defaultCenter] postNotificationName:@"kFirstToSecondNotification" object:nil userInfo:userInfo];
});
}
但是这个是需要估计一个时间,所以不是一个好方法。
以下的方法是不可以的:
- (void)method4 {
RXNotificationSecondViewController *vc = [RXNotificationSecondViewController new];
[self.navigationController pushViewController:vc animated:YES];
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *userInfo = @{
@"name":@"Notification",
@"age":@"18",
@"height":@"188cm"
};
[[NSNotificationCenter defaultCenter] postNotificationName:@"kFirstToSecondNotification" object:nil userInfo:userInfo];
});
}
网友评论