我有一个带有多个ViewControllers的标签栏应用程序,并将它们嵌入到一些导航控制器中。
我用谷歌搜索并尝试将观察者添加到第一个detailVC的viewDidLoad
/ viewWillAppear
/ viewDidAppear
并删除相关viewWillDisappear
/ viewDidDisappear
中的观察者
执行一个模型segue到我的第二个detailVC(也嵌入一个导航控制器),我点击一个名为postNotification的按钮然后关闭第二个detailVC自定义选择器函数调用它工作正常。如果我再次回到masterVC再次执行上述过程,则会调用该函数两次,依此类推。
BTW我在添加观察者时遵循此协议。
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"replyPosted" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addNewComment:) name:@"replyPosted" object:nil];
点击按钮方法
[self dismissViewControllerAnimated:YES completion:nil];
NSDictionary *userinfo = @{@"reply_id":[result valueForKey:@"reply_id"],@"comment":comment};
[[NSNotificationCenter defaultCenter] postNotificationName:@"replyPosted" object:self userInfo:userinfo];
更新!
通过检查导航堆栈中的第一个DetailVC并在viewWillDisappear
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"%@",self.navigationController.viewControllers);
//to check currentVC in navigation stack or not
if([self.navigationController.viewControllers indexOfObject:self] == NSNotFound){
NSLog(@"remove observer from viewWillDisappear");
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"replyPosted" object:nil];
}
}
答案 0 :(得分:0)
如果第一个detailVC在导航控制器堆栈中,则在viewWillDisappear
中不执行任何操作,否则请删除观察者。