2

私はUITableViewmyを持っており、rootViewControllerそのテーブルに解析された RSS を入力します ( myがそのデリゲートであるParserクラスがあります)。RSS を更新するメソッドがrootViewControllerあり、取得したデータを静的なstaticItemsに保持します。rootViewControllerrefreshDataMutableArray

tableViewセル内のセルをクリックすると、同時にdetailViewプッシュされます (セル(行)を選択すると)辞書を作成してに渡します。その辞書では、(選択したセルのインデックス)からの値を渡します。このようにして、ニュースのテキストを表示し、ニュースの配列内のニュースの位置を追跡して、スライドの前/次を実装できます。navigationControllertheItemdetailViewstaticItemspositionInArray

ここで、プッシュ通知を有効にし、受信するとアプリがフォアグラウンドに戻りますが、前回アプリを閉じたときに開かれたビューが表示されます。

RSS を再解析 (更新) し、最後のニュース (theItem[0]) を提示することで、detailView に最後のニュースを提示したいと考えています。

だから、私は次の結果を得たいと思います: を呼び出して[rootController refreshData]から、セル内の最初の項目を選択して開きますdetailView

デリゲート メソッドで遊んでdidReceiveRemoteNotificationいますが、それを機能させる方法が見つかりません。新しい を作成しようとしましrootControllerたが、既存のものの上にスタックします:(。

あなたの考えを私と共有してください:)

4

1 に答える 1

3

まず、この質問はプッシュ通知とはまったく関係ありません。アプリケーションデリゲートの任意の場所からView Controllerにアクセスする方法の問題です。

最善の (そしておそらく唯一の) 方法は、関連するビュー コントローラー インスタンスへの参照を手動で保持することです。

UINavigationControllerルートがリストである場所を使用し、詳細ビューコントローラーをプッシュすると仮定しています。アプリ デリゲートでこのナビゲーション コントローラーへの参照を保持します。@property (nonatomic, retain) UINavigationController *mainNavController;アプリケーション デリゲートに a を追加します。ナビゲーション コントローラーを作成するときは、アプリ デリゲートが参照を持つように割り当てます。

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スワイプでアニメーション化し、戻るボタンでリストに移動します。

于 2011-11-04T15:50:43.503 に答える