В приложении я использую несколько контроллеров view. На одном наблюдающем контроллере наблюдатель инициализируется следующим образом:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MyNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethod:) name:@"MyNotification" object:nil];
Даже при удалении NSNotification
перед инициализацией количество исполнений myMethod:
суммируется на количество повторных просмотров на соответствующем диспетчере представлений.
Почему это происходит и как я могу избежать 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];
edit: даже после перемещения моей подписки на viewwillappear: я получаю тот же результат. myMethod: вызывается несколько раз. (количество раз, когда я перезагружаю viewcontroller).
-(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];
}
edit: что-то кажется неправильным в моем жизненном цикле. ViewDidUnload и dealloc не вызываются, однако viewdiddisappear получает вызов.
То, как я нажимаю свой Viewcontroller в стек, выглядит следующим образом, где parent является подклассом tableview (при нажатии на строку, с которой запускается этот диспетчер представлений:
detailScreen * screen = [[detailScreen alloc] initWithContentID:ID andFullContentArray:fullContentIndex andParent:parent];
[self.navigationController pushViewController:screen animated:YES];
Решение:
Перемещение удаления nsnotification в viewdiddisappear сделало трюк. Спасибо за руководство!