私のアプリには、ユーザーがいつでも表示できる複数の UIViewControllers があります。アプリは、ドキュメント (たとえば、メール アプリの添付ファイル) で開始することもできます。
シナリオは次のとおりです。 - ユーザーはアプリを起動し、アプリケーション内を移動します - ユーザーはアプリをバックグラウンド モードにし、メール アプリに移動します - メール アプリから、ユーザーは添付ファイル付きのメールを選択し、自分のアプリで添付ファイルを開きます -私のアプリはフォアグラウンドに入り、特定のView Controllerに添付ファイルを表示したいと思います。- ユーザーが添付ファイルの処理を終了すると、アプリ内の以前の状態 (添付ファイルを開く前) に戻ることができる必要があります。
UIApplicationDelegate から次のメソッドをオーバーロードしました。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
- (void)applicationDidBecomeActive:(UIApplication *)application
これらのメソッドを使用して、表示するドキュメントがあるかどうか、およびアプリが既に開始されているかどうかを確認できます。
私の問題は、特定の ViewController をプッシュすることです。
以下は、ViewController をプッシュするコードの抜粋ですが、何も起こりません。アプリでアクティブな ViewController を見つけるにはどうすればよいですか?
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"applicationDidBecomeActive");
if (_navigationCell != Nil)
{
if ([DataCenter sharedInstance].isAppStarting == FALSE)
{
// push a new navigation stack to display the cell from the navigation
//PushArroundMeId
UIWindow* window = [UIApplication sharedApplication].keyWindow;
UIViewController* rvc = window.rootViewController;
UIStoryboard* sb= [UIStoryboard storyboardWithName:@"MainStoryboardiPhoneApp" bundle:[NSBundle mainBundle]];
AroundMeViewController* avc = [sb instantiateViewControllerWithIdentifier:@"AroundMeViewControllerId"];
if (avc != Nil) {
[rvc presentViewController:avc animated:TRUE completion:NULL];
window.rootViewController = avc;
}
}
}
}