1

アプリのカスタム URL スキームをセットアップしました。これは、アプリがバックグラウンドで実行されていない場合の動作です。

  • カスタム URL リンクがメールで届き、クリックするとストーリーボードからログイン ビューが表示されます
  • ログインボタンをクリックすると、タブコントローラーで要求したタブが表示されます

ここまでは順調ですね。

これが私が抱えている問題です:

  • メールからカスタム URL リンクを再度クリックすると、アプリが既に一度読み込まれ、バックグラウンドで実行されている場合、ログイン ビューが再び表示されません。

私の質問は、カスタム URL リンクを複数回クリックしたときにログイン ビューを再度読み込むにはどうすればよいかということです。

カスタム URL スキームは、最初は完全に機能しますが、アプリが既に実行されている場合は機能しません。これをデバッグしようとしました...カスタムURLスキームリンクをクリックすると、AppDelegate.mファイルで「handleOpenURL:(NSURL *)url」メソッドが呼び出されるため、ストーリーボードからログイン画面を再度読み込むにはどうすればよいですか?ログイン画面が既にメモリにロードされているかどうかを確認しますか...ログイン画面はストーリーボードの開始ビューです。以下は、アプリのデリゲートで handleOpenUrl 関数がどのように見えるかです。

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    if(!url){
        return NO;

    }
    // check if email link was clicked
    if ([[url scheme] isEqualToString:@"docova"]) {

        NSString *urlString = [url absoluteString];
        NSLog(@"URL Parameter string: %@", [url query]);
        NSLog(@"incoming url => %@", urlString);
        // NSArray *arrayQStrings=[self getDataOfQueryString:urlString];
        NSDictionary *dict = [self parseQueryString:[url query]];
        NSLog(@"query dict: %@", dict);
        NSLog(@"query dict: %@", [dict valueForKey:@"action"]);
        NSLog(@"query dict: %@", [dict valueForKey:@"docpath"]);

        //[self.tabBarController setSelectedIndex:1]; // tab 3
        //[self.parentViewController.tabBarController setSelectedIndex:1]; // tab 3

        /* save user data ***/
        NSUserDefaults *appPrefs = [NSUserDefaults standardUserDefaults];
        [appPrefs setObject:[dict valueForKey:@"action"] forKey:@"action"]; // reset these after using it
        [appPrefs setObject:[dict valueForKey:@"docpath"] forKey:@"docpath"]; // reset these after using it

        // save data to application preference
        [appPrefs synchronize];
         return YES;

    }

    return NO;

}

アプリが既に実行されているときに、ストーリーボードからビューを前もって表示する方法を誰かが提案できますか? Androidにもアクティビティスタックがあることは知っていますが、iOSにもそのようなものがあります...

4

2 に答える 2

0

私が理解しているように、このようなインターフェースビルダー構造

ナビゲーション コントローラ -> ログイン ビュー コントローラ -> タブバー コントローラ

アプリが既にバックグラウンドで実行されている場合、ユーザーがメール リンクを介してアプリを開いた場合、最初にログイン ビューを表示しますか?

NSNotificationCenterログインビューにポップするメソッドを呼び出すために使用できます。

これが元です。通知を登録して呼び出すコード。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popToLoginView:) name:@"popToLoginViewNotification" object:nil];

メソッドを通知する。

[[NSNotificationCenter defaultCenter] postNotificationName:@"popToLoginViewNotification" object:nil];

TabbarController クラスがpopToLoginViewメソッドを配置している場合。または tabbar putpopToLoginViewメソッドの各View Controller。ビュー内で、このコードで現在のビューかどうかを確認します

if (viewController.isViewLoaded && viewController.view.window) {
// viewController is visible
}

次に、ログイン ビューにポップします。

これが役立つことを願っています。

于 2013-10-09T06:01:03.743 に答える