gpt4 book ai didi

ios - removeObserver with NSNotification...我做错了什么?

转载 作者:IT王子 更新时间:2023-10-29 07:52:25 31 4
gpt4 key购买 nike

基本上,我有一个 view1,它在某个时候调用 view2(通过 presentModalViewController:animated:)。当按下 view2 中的某个 UIButton 时,view2 会调用 view1 中的通知方法,然后立即关闭。通知方法弹出警报。

通知方法工作正常并被适当调用。问题是,每次创建 view1(一次只应存在一个 view1)时,我大概会创建另一个 NSNotification,因为如果我从 view0(菜单)转到 view1,然后返回并返回来回几次,我从通知方法中收到一系列相同的警报消息,一个接一个,就像我打开 View 1 一样。

这是我的代码,请告诉我我做错了什么:

View1.m

-(void) viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(showAlert:)
name:@"alert"
object:nil];
}

-(void) showAlert:(NSNotification*)notification {
// (I've also tried to swap the removeObserver method from dealloc
// to here, but it still fails to remove the observer.)
// < UIAlertView code to pop up a message here. >
}

-(void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}

View2.m

-(IBAction) buttonWasTapped {
[[NSNotificationCenter defaultCenter] postNotificationName:@"alert"
object:nil];
[self dismissModalViewControllerAnimated:YES];
}

-(void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}

最佳答案

调用 -dealloc 不会在 View Controller 被关闭后自动发生——在 View Controller 的生命周期中仍然会有一些“生命”。在该时间范围内,该 View Controller 仍订阅该通知。

如果您在 -viewWillDisappear:-viewDidDisappear: 中移除观察者,这将产生更直接的效果:

- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:@"alert"
object:nil];
}

关于ios - removeObserver with NSNotification...我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328210/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com