我有UITableView作为我的rootViewController,并且用解析的RSS填充了该表(有一个Parser类,其中我的rootViewController是它的委托)。在rootViewController中,我具有刷新RSS refreshData的方法,并且将检索到的数据保存在静态MutableArray staticItems中:

在单击tableView单元格中的单元格时,将detailView推到navigationController上,同时(在选择单元格(行)时)我创建字典并将theItem传递给detailView。在该字典中,我传递了staticItemspositionInArray(所选单元格的索引)中的值。这样,我可以显示新闻文本并跟踪新闻在新闻数组中的位置,以实现幻灯片上一页/下一页。

现在,我启用了推送通知,并且在收到一个推送通知后,我的应用回到了前台,但是上一次关闭该应用时打开了该视图。

我想通过重新解析(刷新)RSS并呈现最新消息(theItem [0])来在detailView中呈现最新消息。

因此,我想得到以下结果:调用[rootController refreshData],然后选择单元格中的第一项并在detailView中打开它

我一直在使用委托方法didReceiveRemoteNotification,但是我找不到使它起作用的方法。我尝试创建新的rootController,但随后将其堆叠在现有的:(。

请和我分享您的想法:)

最佳答案

首先,这个问题与推送通知根本无关。更多的问题是如何从应用程序委托中的任意位置访问视图控制器。

最好的(可能是唯一的)选择是手动保留对相关视图控制器实例的引用。

我假设您使用UINavigationController,其中根是您的列表,然后将详细信息视图控制器压入其中。在您的应用程序委托中保留对此导航控制器的引用。将@property (nonatomic, retain) UINavigationController *mainNavController;添加到您的应用程序委托。创建导航控制器时,请对其进行分配,以便应用程序委托具有引用。

MyAppDelegate *ad = ((MyAppDelegate *)[UIApplication sharedApplication].delegate);
ad.mainNavController = theNavController;


如果在应用程序委托本身中创建导航控制器,则显然只需要这样做:

self.mainNavController = theNavController;


然后,当您收到推送通知时,只需直接在导航控制器上操作即可。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    // Do whatever you need to do in order to create an instance of your
    // detail view controller
    MyDetailViewController *vc = [MyDetailViewController magicalStuff:userInfo];

    // Add the detail view controller to the stack, but keep the root view
    // controller.
    UIViewController *root = self.mainNavController.topViewController;
    NSArray *vcs = [NSArray arrayWithObjects:root, vc, nil];
    [self.mainNavController setViewControllers:vcs animated:YES];
}


然后,导航控制器将通过滑动动画设置为MyDetailViewController,并且“后退”按钮将带您到列表。

关于iphone - 打开有关接收推送通知的特定 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6197898/

10-13 04:14