应用程序代表:
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[NSNotificationCenter defaultCenter] postNotificationName:APP_REFRESH_NOTIFICATION object:nil];
}在我看来,控制器:
- (void)viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doStuff) postNotificationName:APP_REFRESH_NOTIFICATION object:self];
}- (void)doStuff从来没有接到过电话。为什么?
发布于 2013-10-15 21:14:02
我假设您输入的问题不正确,您打算编写addObserver:selector:name:object:,而不是addObserver:selector: postNotificationName:object: (不存在这种方法)。
在- (void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender的文档中,我们可以看到:
notificationSender 观察者希望接收其通知的对象;也就是说,只有此发送方发送的通知才被传递给观察者。如果您通过零,通知中心将不会使用通知的发件人来决定是否将其传递给观察者。
因此,在您的例子中,当您在postNotificationName:object:中传递postNotificationName:object:时,您还必须在addObserver:selector:name:object:中设置object:nil。
根据文档,您还应该将方法doStuff替换为:
- (void)doStuff:(NSNotification *)notification并在@selector(doStuff:)中使用addObserver:selector:name:object:。
发布于 2013-10-15 21:18:39
您将self作为object参数传递给addObserver:selector:name:object:,但是doStuff不接受任何参数,因此方法调用失败(静默)。您的viewDidLoad应该如下所示:
- (void)viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(doStuff)
name:APP_REFRESH_NOTIFICATION
object:nil];
}发布于 2013-10-15 21:13:10
您的app委托在应用程序激活时发布通知,但在加载视图之前,您的视图控制器不会订阅该通知。如果您的应用程序委托正在创建视图控制器并加载它(这是可能的),那么在发布通知时,您的控制器甚至都不存在,这就是为什么它没有接收到它。如果您使用故事板,并且该控制器是故事板中的入口点,并且您使用应用程序的info.plist设置故事板作为主接口,那么它将已经实例化了控制器并在调用-applicationDidBecomeActive:时加载了它的视图,从而解决了您的问题。
https://stackoverflow.com/questions/19391062
复制相似问题