gpt4 book ai didi

ios - 为什么我的 NSNotification 多次调用它的观察者?

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

在一个应用程序中,我使用了多个 View Controller 。在一个 View Controller 上,观察者初始化如下:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MyNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethod:) name:@"MyNotification" object:nil];

即使在初始化之前删除 NSNotification 时,myMethod: 的执行次数也会由相应 View Controller 上的重复 View 数量加总。

为什么会发生这种情况,我怎样才能避免 myMethod: 被多次调用。

注意:我通过使用断点来确保我在多次调用 postNotification 时没有出错。

编辑:这是我的 postNotification 的样子

NSArray * objects = [NSArray arrayWithObjects:[NSNumber numberWithInt:number],someText, nil];
NSArray * keys = [NSArray arrayWithObjects:@"Number",@"Text", nil];
NSDictionary * userInfo = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:self userInfo:userInfo];

编辑:即使在将我的订阅移至 viewwillappear: 之后,我也会得到相同的结果。 myMethod: 被多次调用。 (我重新加载 View Controller 的次数)。

-(void)viewWillAppear:(BOOL)animated {

[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MyNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethod:) name:@"MyNotification" object:nil];
}

编辑:我的生命周期似乎有问题。 ViewDidUnload 和 dealloc 没有被调用,但是 viewdiddisappear 被调用了。

我将我的 Viewcontroller 推送到堆栈的方式如下,其中 parent 是一个 tableview 子类(在单击该 viewcontroller 的行时启动:

detailScreen * screen = [[detailScreen alloc] initWithContentID:ID andFullContentArray:fullContentIndex andParent:parent];
[self.navigationController pushViewController:screen animated:YES];

解决方法:

将 nsnotification 的删除移动到 viewdiddisappear 就成功了。感谢指导!

最佳答案

根据此描述,一个可能的原因是您的 View Controller 被过度保留并且没有在您认为的时候被释放。如果东西被过度保留,即使使用 ARC,这也是很常见的。因此,您认为您只有一个给定 View Controller 的实例处于事件状态,而实际上您有多个事件实例,并且它们都收听通知。

如果我遇到这种情况,我会在 viewcontroller 的 dealloc 方法中放置一个断点,并确保它被正确释放,如果这是您应用程序的预期设计的话。

关于ios - 为什么我的 NSNotification 多次调用它的观察者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19801645/

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