首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >didBecomeActive发布通知,我的视图控制器从未听到过它。

didBecomeActive发布通知,我的视图控制器从未听到过它。
EN

Stack Overflow用户
提问于 2013-10-15 21:05:31
回答 3查看 741关注 0票数 0

应用程序代表:

代码语言:javascript
运行
复制
- (void)applicationDidBecomeActive:(UIApplication *)application {
    [[NSNotificationCenter defaultCenter] postNotificationName:APP_REFRESH_NOTIFICATION object:nil];
}

在我看来,控制器:

代码语言:javascript
运行
复制
- (void)viewDidLoad {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doStuff) postNotificationName:APP_REFRESH_NOTIFICATION object:self];
}

- (void)doStuff从来没有接到过电话。为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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替换为:

代码语言:javascript
运行
复制
- (void)doStuff:(NSNotification *)notification

并在@selector(doStuff:)中使用addObserver:selector:name:object:

票数 1
EN

Stack Overflow用户

发布于 2013-10-15 21:18:39

您将self作为object参数传递给addObserver:selector:name:object:,但是doStuff不接受任何参数,因此方法调用失败(静默)。您的viewDidLoad应该如下所示:

代码语言:javascript
运行
复制
- (void)viewDidLoad {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(doStuff)
                                                 name:APP_REFRESH_NOTIFICATION
                                               object:nil];
}
票数 1
EN

Stack Overflow用户

发布于 2013-10-15 21:13:10

您的app委托在应用程序激活时发布通知,但在加载视图之前,您的视图控制器不会订阅该通知。如果您的应用程序委托正在创建视图控制器并加载它(这是可能的),那么在发布通知时,您的控制器甚至都不存在,这就是为什么它没有接收到它。如果您使用故事板,并且该控制器是故事板中的入口点,并且您使用应用程序的info.plist设置故事板作为主接口,那么它将已经实例化了控制器并在调用-applicationDidBecomeActive:时加载了它的视图,从而解决了您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19391062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档