我有一个对UIViewController没有响应的NSNotifications。我确信由通知启动的操作是有效的。我的设置有什么问题吗?
我使用一个单例从AppDelegate的didFinishLaunching加载一个feedViewController。这个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)发送可靠通知:
- (void)notifyDidChangeOffset:(CGFloat)offset orientation:(IIViewDeckOffsetOrientation)orientation panning:(BOOL)panning {
[self performDelegate:@selector(viewDeckController:didChangeOffset:orientation:panning:) offset:offset orientation:orientation panning:panning];
[[NSNotificationCenter defaultCenter] postNotificationName:@"ViewDeckPanned" object:[NSNumber numberWithFloat:offset]];}
发布于 2013-08-18 20:26:18
你设置:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewDeckPanned:) name:@"ViewDeckPanned" object:_deckController];这意味着您正在侦听来自ViewDeckPanned _deckController的名称“”的通知(因为object:参数应该定义通知发件人)。
但是,在同一时间,你发布通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"ViewDeckPanned" object:[NSNumber numberWithFloat:offset]];然后告诉NSNumber编号:偏移是发送者。由于_deckController和NSNumber实例不匹配,所以在观察者中没有收到通知信息。
简单的更改是将nil作为object:参数传递(在这两个地方--添加观察者和发布通知),如果您想传递NSNumber和通知,那么创建包含它的userInfo字典。
https://stackoverflow.com/questions/18303254
复制相似问题