2013-09-19 4 views
3

В моей раскадровке у меня есть NavViewController, который устанавливает корневой режим ViewController1. Затем ViewController1 имеет push-сег для ViewController2 с идентификатором «socialSeg». ViewController1 имеет UIImageView, который я использую для загрузки видеокамеры. После того, как пользователь запишет видео и выберет «Использовать», я хочу загрузить следующий контроллер представления. В ViewController1.m у меня есть следующее:performSegueWithIdentifier срабатывает, но не загружает следующий вид

- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    NSLog(@"Performing Segue with ID"); 
    [self performSegueWithIdentifier:@"socialSeg" sender:self]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"Prepping"); 
} 

Оба NSLogs работают, но ничего не происходит на моем экране. Я не вижу ViewController2, и никаких сообщений об ошибках не появляется. Правильно ли я делаю это?

Связанный вопрос: Должен ли я запускать performSegueWithIdentifier на себя (текущий ViewController), или они должны запускаться на self.navigationController?

Редактировать: Я попытался несколько сократить свой вопрос, чтобы сохранить пост короче, я понял, что вам может понадобиться больше контекста.

Адрес: full storyboard. В основном «Video View Controller» будет ViewController1, а «Social View Controller» - ViewController2. Когда я нажимаю кнопку «Root View Controller» (запись видео), этот сеанс отлично работает, и поэтому я его оставил. Есть ли вероятность, что «Root View Controller» может отбросить вещи?

+0

Вы уверены, что переход подключен правильно и назван? Попробуйте, если он работает, когда вы запускаете его через событие пользовательского интерфейса, например. нажатие кнопки. – Matthias

+0

Я отредактировал мой вопрос, чтобы включить снимок экрана моей раскадровки. Я на 99% уверен, что все подключено и правильно названо (новичок в ios dev). Я попытался подключить кнопку к ViewController2 вместо того, чтобы запускать ее из 'didFinishPickingMediaWithInfo', и это сработало нормально. –

ответ

3

Нет ничего плохого в коде performSegue. Кажется, что ваша анимация выбора еще выполняется, когда вы выполняете этот Segue. Попробуйте позвонить performSegue в блок завершения presentViewController, изменив ваш настоящий вызов, как показано ниже.

[imagePickerController presentViewController:YES completion:^() { 
    NSLog(@"Performing Segue with ID"); 
    [self performSegueWithIdentifier:@"socialSeg" sender:self]; 
}]; 

Пожалуйста, убедитесь, чтобы заменить imagePickerController с именем вашего всплывающего контроллера захватывающего изображение.

Это не идеальное решение, но вы также можете задержать выполнение вашего вашего performSegue, чтобы убедиться, что ваш сборщик изображения анимации остановилась как:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    //1.5 is number of seconds its going to wait before executing the block of code 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.5 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{ 
     NSLog(@"Performing Segue with ID"); 
     [self performSegueWithIdentifier:@"socialSeg" sender:self]; 
    }); 
} 

ПРИМЕЧАНИЯ: Проблемы в том, что подборщика изображения всплывающего окно анимация по-прежнему (чтобы закрыть сборщик после того, как пользователь выбрал изображение или видео), когда performSegue пытается запустить другую анимацию для загрузки следующего контроллера представления. Поскольку одна анимация еще не закончена, поэтому performSegue анимация получает игнорирование и просмотр контроллера не загружается.

Вот родственный вопрос и ответ: performSegueWithIdentifier not working

+0

Я пробовал это, но он сказал, что 'уклонение отМодулюКонтроллерАнимация' обесценивается в ios6. Я заменил его на 'rejectViewControllerAnimated' (если это эквивалентно?) И до сих пор не повезло –

+0

Я обновил ответ. Не забывайте заменять переменную 'imagePicker' именем вашего контроллера выбора изображения. –

+0

Хорошо, я попробовал это, и теперь я получаю «Завершение приложения из-за неотображенного исключения» NSInvalidArgumentException », причина:« Приложение попыталось представить модально активный контроллер . » –

Смежные вопросы