主要在一些界面之间跨度大的界面使用比如要从C界面传到A界面这样或者多个地方需要执行一个操作的时候。通知最好是在viewDidLoad这个方法中创建
首先在需要传送得界面C界面创建通知
//创建通知
NSDictionary * dic = @{@"zhuce":@YES};
[[NSNotificationCenter defaultCenter] postNotificationName:@"approveSelf" object:nil userInfo:dic];
这只能传一个字典,userInfo的返回就是一个字典
这是第二步啦,在接受通知的地方也创建通知接受的方法
接受通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(approveSelf:) name:@"approveSelf" object:nil];//传值通知创建好啦
//实现通知的方法
-(void)approveSelf:(NSNotification *)notification{
BOOL approveBool = notification.userInfo[@"zhuce"];
if ( approveBool == YES) {
[self verificationType:Verification_idCardLight];
}
}
最后一步不要忘记哦,移除通知
//最好在dealloc这个方法中移除通知
-(void)dealloc{
//第一种方法.这里可以移除该控制器下的所有通知
// 移除当前所有通知
NSLog(@"移除了所有的通知");
[[NSNotificationCenter defaultCenter] removeObserver:self];
//第二种方法.这里可以移除该控制器下名称为zhuce的通知
//移除名称为zhuce的那个通知
NSLog(@"移除了名称为zhuce的通知");
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"zhuce" object:nil];
}
这里注意:如果dealloc方法不调用,说明当前有变量没有被释放,这时如果找不到问题所在,也可以重写控制器的返回按钮backBarButtonItem事件,在返回的时候进行移除通知操作
//返回上一层界面事件
-(void)backPreviousViewControllerAction{
//第一种方法.这里可以移除该控制器下的所有通知
// 移除当前所有通知
NSLog(@"移除了所有的通知");
[[NSNotificationCenter defaultCenter] removeObserver:self];
//第二种方法.这里可以移除该控制器下名称为tongzhi的通知
//移除名称为tongzhi的那个通知
NSLog(@"移除了名称为tongzhi的通知");
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"tongzhi" object:nil];
// 返回上一层界面
[self.navigationController popViewControllerAnimated:YES];
}
配个图
timg.jpeg
网友评论