UIViewController没有响应NSNotifications

时间:2013-08-18 20:18:59

标签: ios

我有一个UIViewController没有响应NSNotifications。我确信通知启动的操作有效。我的设置可能出现什么问题?

我使用单身人士从feedViewController的{​​{1}}加载AppDelegate。此didFinishLaunching保留对feedViewController的引用,此deckViewController可靠地发送deckViewController应观察的通知。然而,从未收到通知。我确保feedViewController保留了对应该接收通知的视图控制器的强引用。

在包含对通知观察者的引用的singleton中:

singleton

在通知观察员( // .h file @property (nonatomic) ROFeedViewController *feedViewController; // .m file _feedViewController = [[ROFeedViewController alloc] init]; IIViewDeckController *deckController = [[IIViewDeckController alloc] initWithCenterViewController:_feedViewController leftViewController:leftController rightViewController:rightController]; _feedViewController.deckController = deckController; )中:

ROFeedViewControler

通知发件人(- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewDeckPanned:) name:@"ViewDeckPanned" object:_deckController]; ... } - (void)viewDeckPanned:(NSNotification *)notification { float offset = [(NSNumber *)[notification object] floatValue]; if (offset > 0) { _leftButton.transform = CGAffineTransformMakeRotation(offset * M_PI / 180.0); } else { _rightButton.transform = CGAffineTransformMakeRotation(offset * M_PI / 180.0); } } )发送的通知可靠:

IIViewDeckController

}

1 个答案:

答案 0 :(得分:2)

您设置:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewDeckPanned:) name:@"ViewDeckPanned" object:_deckController];

这意味着您正在收听来自来自 _deckController的名称“ViewDeckPanned”的通知(因为object:参数应该定义通知发件人)。

但是,同时,您发布通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ViewDeckPanned" object:[NSNumber numberWithFloat:offset]];

你告诉[NSNumber numberWithFloat:offset]是发件人。由于_deckControllerNSNumber的实例彼此不匹配,因此您的观察者不会收到任何通知信息。

简单的更改是将nil作为object:参数传递(在两个地方 - 您添加观察者的位置,以及发布通知的位置),如果您想通过NSNumber和通知,那么创建包含它的userInfo字典。