首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从didReceiveRemoteNotification中更改视图

从didReceiveRemoteNotification中更改视图
EN

Stack Overflow用户
提问于 2011-09-30 05:40:38
回答 1查看 4.4K关注 0票数 1

作为iPhone开发的新手,我正在慢慢地做到这一点,但有时简单的事情似乎会让我感到困惑。

我的应用程序由7个截然不同的视图组成。它是作为一个基于窗口的应用程序实现的,没有导航控制器。导航由每个视图控制器单独管理,我使用中央数据存储库通过应用程序提供数据。

我使用:-

代码语言:javascript
复制
DetailView *viewDetail = [[DetailView alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:viewDetail animated:YES];

来更改视图。显然,在所有情况下,这都是在当前视图的控制器中执行的。

然而,我现在已经将推送通知添加到了应用程序中。在接收到推送时,在主AppDelegate内使userInfo数据可用,并执行didReceiveRemoteNotification。我希望强制应用程序进入上面描述的Detailview,并将userInfo中的一个值传递给它。

当然,只要它执行第二行,我就会得到一个很好的SIGABRT。我认为这是因为当前活动的视图不是self。如何从应用程序委托中放弃当前视图以支持DetailView?当前视图可以是7个视图中的任何一个,包括DetailView,我希望用新数据刷新它。

提前感谢Chris Hardaker

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-30 09:47:49

这是一个小的附注,但您使用的命名约定是非标准的。而不是,

代码语言:javascript
复制
DetailView *viewDetail = [[DetailView alloc] initWithNibName:nil bundle:nil];

通常,iOS开发人员会看到以下内容:

代码语言:javascript
复制
DetailViewController *viewDetail = [[DetailViewController alloc] initWithNibName:nil bundle:nil];

因为viewDetail是UIViewController的子类,而不是UIView。

不过,为了回答您的主要问题,我将使用NSNotificationCenter。基本上,这允许任何类发布通知,这或多或少只是抛出了一个事实,即事件发生在任何正在侦听它的类上。

因此,在didReceiveRemoveNotification:中,您可以调用:

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] postNotificationName:@"pushNotification" object:nil userInfo:userInfo];

在分配视图控制器时,运行以下代码行:

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushNotificationReceived:) name:@"pushNotification" object:nil];

您需要在每个视图控制器中放置一个名为pushNotificationReceived: (NSNotification*)aNotification的方法来处理通知。您传递的userInfo字典将成为通知的属性。

现在,当@"pushNotification“通知被发送时,您的控制器将收到一个通知并运行给定的选择器。因此,您可以关闭控制器或显示细节视图或任何您想要的。

取消分配视图控制器时,请确保调用

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] removeObserver:self];
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7603712

复制
相关文章

相似问题

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