各位本人最近在做即时通讯的时候本人很多页面都用到了通知、代理以及block进行传值并且刷新页面。可是本人现在遇到了一个通知多次执行的问题。是这样的本人将xmpp的代理方法封装成了一个类,在这个类里面很多地方都用到了通知去告诉本人一些页面进行刷新获取最新的聊天信息数据,可是本人现在遇到的情况就是本人在历史聊天页面中本人用到了通知可是本人又不能在本人页面关闭的时候把代理给移除了,假如一移除本人将无法执行xmpp封装类所发出的代理方法,从而导致本人页面无法刷新。后来本人又想到了在viewDidLoad中创建注册通知方法的之前本人先给移除一下全部的通知,然后在注册 可是事与愿违还是没法解决本人的多次执行和那个无法刷新界面的方法,下面这几个通知本人都要一直开着才能实现本人的刷新 可是这样一来本人退出一次在登录一次这样会造成通知叠加执行,有没有高手能给出比较好的解决方法
- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = defaultBackgroundColor; self.navigationItem.title = [UserInfromation gettingUserInformation:@"titles"]; [[NSNotificationCenter defaultCenter] removeObserver:self]; //监听消息来得通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cleanRecentList) name:@"upDataRecentList" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(messageCome:) name:SendMsgName object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(messageCome:) name:@"getGroupList" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(readChatData) name:@"upDataView" object:nil]; myTableView = [[UITableView alloc]init]; myTableView.frame = CGRectMake(0, 0, kWindowWidth, kWindowHeight-113); myTableView.delegate = self; myTableView.dataSource = self; [self.view addSubview:myTableView]; myTableView.tableFooterView = [UIView new]; }
解决方案
20
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//注册通知 这样就只是注册一次通知
});
dispatch_once(&onceToken, ^{
//注册通知 这样就只是注册一次通知
});