Как выполнить Segue в AppDelegate?

Я пытаюсь выполнить приложение на IOS 5.1 с помощью раскадровки. В основном я делаю приложение dropbox. Поскольку я использую Dropbox SDK, ссылка на Dropbox обрабатывается в AppDelegate.m. У пользователя есть возможность отключиться от сеанса и связать его снова в разных Контроллерах Просмотр. Таким образом, каждый раз, когда пользовательская ссылка и несвязанное приложение должны переключать представление из Appdelegate на контроллер вида, который не подключен к rootviewcontroller

В исходном примере Dropbox Dropbox обрабатывается как следующий код

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    if ([[DBSession sharedSession] handleOpenURL:url]) {
        if ([[DBSession sharedSession] isLinked]) {
            [navigationController pushViewController:rootViewController.photoViewController animated:YES];
        }
        return YES;
    }

    return NO;
}

Но я использую Storyboard с контроллером навигации, и ни один из следующих методов не работает. Я помещаю методы в комментарии.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    if ([[DBSession sharedSession] handleOpenURL:url]) {
        if ([[DBSession sharedSession] isLinked]) {

            NSLog(@"App linked successfully!");
            // At this point you can start making API calls

            /*UIViewController *viewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL] instantiateViewControllerWithIdentifier:@"MeetingViewController"];
            [self.navigationController pushViewController:viewController animated:YES]; */

           //[self performSegueWithIdentifier:@"xxxx" sender:self];

           /* LoginDropboxViewController *loginController=[[LoginDropboxViewController alloc] initWithNibName:@"LoginDropbox" bundle:nil];
            [navigationController pushViewController:loginController animated:YES]; */

        }
        return YES;
    }
    // Add whatever other url handling code your app requires here
    return NO;
}

Вот раскадровка приложения enter image description here

Итак, как я могу переключить представление в AppDelegate.h?

Примечание. Если я добавлю segue и назову segue, скажем, goToMeeting  [self performSegueWithIdentifier: @ "goToMeeting" отправитель: self];

Ошибка: No Visible @interface for 'AppDelegate' declares the selector performSegueWithIdentifier:sender

Ответ 1

Если вы считаете, что нажатие на просмотр вручную, а не segueperform, следующий код, скорее всего, будет работать для вас.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    if ([[DBSession sharedSession] handleOpenURL:url]) {
        if ([[DBSession sharedSession] isLinked]) {

            NSLog(@"App linked successfully!");
            // At this point you can start making API calls

            //push view manually 
            UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
            LoginDropboxViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"LoginDropbox"];
            [(UINavigationController*)self.window.rootViewController pushViewController:ivc animated:NO];



    }
        return YES;
    }
    // Add whatever other url handling code your app requires here
    return NO;
}

Ответ 2

Вы можете сделать это следующим образом:

UINavigationController *navigationController = (UINavigationController*) self.window.rootViewController;

[[[navigationController viewControllers] objectAtIndex:0] performSegueWithIdentifier:@"goToMeeting" sender:self];

Это будет работать только в том случае, если индекс в массиве viewControllers соответствует одному из ваших контроллеров представления и, если он существует, конечно. В этом случае это первый (в массиве и раскадровке).

Сессия ( "goToMeeting" ) не должна присоединяться к действию. Способ, которым вы это делаете, - это перетащить управление из значка владельца файла внизу сцены сцены в сцену назначения. Появится всплывающее окно, в котором будет запрашиваться опция в "Manual Segue"; выберите тип "Push". Нажмите на маленький квадрат и убедитесь, что вы в Инспекторе атрибутов. Дайте ему идентификатор, который вы будете использовать для ссылки на него в коде.