我有一个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
}
答案 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]是发件人。由于_deckController
和NSNumber
的实例彼此不匹配,因此您的观察者不会收到任何通知信息。
简单的更改是将nil
作为object:
参数传递(在两个地方 - 您添加观察者的位置,以及发布通知的位置),如果您想通过NSNumber和通知,那么创建包含它的userInfo字典。