4

pust 通知を受け取り、プッシュで取得したデータに基づいてビュー コントローラーをプッシュします。私はこのようにします:

   UINavigationController *navVc=(UINavigationController *) self.window.rootViewController;
   PictureTakeVC *pvc=[[PictureTakeVC alloc] init];
   [navVc pushViewController:pvc animated:NO];

動作しますが、ホームボタンを押す前に開いていたView Controllerが一瞬表示されます。

私もこれを試しましたが、同じことが起こります:

PictureTakeVC *pvc=[[PictureTakeVC alloc] init];            
NSArray *vcs=[[NSArray alloc] initWithObjects: pvc, nil];
UINavigationController *navVc=(UINavigationController *) self.window.rootViewController;
navVc.viewControllers=vcs;
self.window.rootViewController = navVc;

vc didReceiveRemoteNotification をプッシュして、すぐに開き、他の vc がしばらく表示されないようにする方法は?

4

4 に答える 4

3

「でも、ホームボタンを押す前に開いていたView Controllerが一瞬だけ表示される」とおっしゃっていましたが、

その理由はコードではなく、iOS システムにあります。アプリがバックグラウンドになったときの画面のスクリーンショットをキャプチャします。文書化されているように:

バックグラウンドに移行する前に、ビューから機密情報を削除してください。アプリがバックグラウンドに移行すると、システムはアプリのメイン ウィンドウのスナップショットを取得し、アプリをフォアグラウンドに戻すときに短時間表示します。applicationDidEnterBackground: メソッドから戻る前に、スナップショットの一部としてキャプチャされる可能性のあるパスワードやその他の機密性の高い個人情報を非表示または不明瞭にする必要があります。

そのため、スナップショットが削除されると、新しくプッシュされたビュー コントローラーが直接表示されます。(スナップショットに関するアップルのガイドラインについては不明)

アップデート:

applicationDidEnterBackground1 つの方法は次のとおりです。アプリ画面がバックグラウンド (メソッド内) になったときに、アプリ画面に黒色の背景を追加します。そのため、アプリケーションに戻るときに黒い画面が表示されます。{すでに開始されているアプリケーションの起動イメージを表示するために保存します。}

それはどこに役立ちますか?

アプリケーション サンドボックスの「Preference」ディレクトリからスナップショットを削除し (アプリケーションがバックグラウンドになった後)、アプリケーションに戻ると、スナップショットがないため、しばらくの間黒く表示されます。

私たちのアプローチとスナップショットの削除の結果は同じです。

于 2012-08-17T11:40:24.580 に答える
1

あなたは何かが欠けていますか?didReceiveRemoteNotificationアプリケーションがアクティブで実行されているときに発生します。

...しかし、とにかく、あなたが求めていることを達成したい場合は、からのプッシュ通知があることを検出する必要がありますdidFinishLaunchingWithOptions(またはからである可能性がありますapplicationDidBecomeActiveapplicationWillEnterForegroundそしてこれらの方法の1つからrootviewcontrollerにviewcontrollerをプッシュします。

リモート通知があったかどうかを検出するには:

NSString *params = [[launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"] objectForKey:@"View"];
if (params) 
{
    // push view
}

次の方法を使用してビューをプッシュします。アプリケーションがアクティブ化されたときに他のVCは表示されません。問題があれば教えてください。

- (void)applicationWillEnterForeground:(UIApplication *)application
{
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
}

プッシュ通知についても同様のことを行ったので、間違っていると理解した場合、正確に何を達成しようとしているのかを教えてください。

于 2012-08-13T10:16:07.763 に答える
1

PictureTakeVCビューコントローラーなので、代わりにこれを使用してください

 PictureTakeVC *pvc = [[PictureTakeVC alloc] initWithNibName:@"PictureTakeVC" bundle:nil];
 [self.navigationController pushViewController:pvc animated:YES];
于 2012-08-10T13:52:08.530 に答える
1

アプリがバックグラウンド モードに入る前に、そこにあるビューを削除してください。

于 2012-08-10T14:40:55.397 に答える