【发布时间】:2013-11-06 00:11:25
【问题描述】:
在一个应用程序中,我使用了几个视图控制器。在一个视图控制器上,观察者的初始化如下:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MyNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethod:) name:@"MyNotification" object:nil];
即使在初始化 myMethod: 的执行次数之前删除 NSNotification 时,也会被相应视图控制器上重复视图的数量相加。
为什么会发生这种情况以及如何避免 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: 被多次调用。 (我重新加载视图控制器的次数)。
-(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 就可以了。感谢指导!
【问题讨论】:
-
你的解决方案对我有用thanq....
-
@BarryK88 thnx 解决方案:帮助
-
我以某种方式完成的另一件会导致类似问题的事情被声明为
NSString * const ABCSomeNotification两次...
标签: ios iphone uiviewcontroller nsnotificationcenter nsnotifications