2014-02-20 4 views
1

Когда мой IOS приложение запускает в первый раз, я автоматически открыть «Добро пожаловать» модальный как это:Предупреждение при попытке Отклонить View Controller (Modal в Modal)

UIViewController *intro = [self.storyboard instantiateViewControllerWithIdentifier:@"intro"]; 

intro.modalPresentationStyle = UIModalPresentationFullScreen; 

//Show the modal 
[self presentViewController:intro animated:NO completion:nil]; 

Внутри этого модальным, пользователь предлагается связать приложение с Dropbox. Они нажмите на кнопку, что пожары это:

[[DBSession sharedSession] linkFromController:self]; 

Это метод Dropbox SDK, который открывает аутентификации UIWebView Dropbox в другой модальной, который выглядит следующим образом: http://d.pr/i/6ZnC

После входа в систему, модальный автоматически анимированные закрыты.

Я затем попытаться закрыть оригинальную вводную модальность с этим:

[self dismissViewControllerAnimated:YES completion:nil]; 

Но я получаю это предупреждение и модальный не закрывает:

Предупреждение: Попытка уволить с точки зрения контроллер < PPIntroViewController: 0xf296ab0 > пока выполняется презентация или увольнение!

Вот что я пытался:

  1. Я ставлю искусственную задержку перед dismissViewControllerAnimated, чтобы модальное близко Dropbox, но это не помогает: [NSThread sleepForTimeInterval:2.0];
  2. Я попытался поворота от анимации: [self dismissViewControllerAnimated:NO completion:nil];, и это тоже не помогает.
  3. Я пробовал проверить, что модальный увольнение уже идет: if(![self isBeingDismissed]){ ... } и не повезло.

Любые идеи? Как я могу определить, что именно представляет/отклоняет и препятствует закрытию модала?

IOS 7 + Xcode 5

ответ

1

Я нашел этот вопрос. Вы можете увидеть эту строку в DBSession+ios.m

[rootController presentModalViewController: NavController анимированный: YES];

Таким образом, внутренне они представят свой контроллер вида проверки подлинности от self. Уже вы представляете свой контроллер вида от self. Поэтому, когда они или вы пытаетесь отклонить контроллер просмотра от себя, предоставьте это предупреждение, потому что оно представило контроллер представления. Поэтому вместо того, чтобы передавать self dropBox, передайте intro контроллер просмотра.

[[DBSession sharedSession] linkFromController:intro]; 
+0

Хм ... Я открываю мода Dropbox от * внутри * 'intro', поэтому, ссылаясь на это, я хочу указать на себя ', no?' intro' встает в родительском контроллере. –

+0

попробуй это другим способом .. [[DBSession sharedSession] linkFromController: self.presentingViewController], так как модальный стек контроллера поврежден, они не накапливаются Чисто ... – Jef

+0

Точная точка, где вы пытались уволить после аутентификации? Вот как получить этот метод делегирования, который аутентифицирован и уволен? – Mani

0

Попробуйте называть

[self dismissViewControllerAnimated:YES completion:nil]; 

Изнутри introViewController, а не из в корневой. Это должно вызвать self.presentingViewController, если нет другого модального. Таким образом, я вложил один в блок дескриптора завершения первого

+0

Возможно, я был неясно, но я вызываю 'rejectViewControllerAnimated' изнутри' introViewController' и не повезло. :( –

0

I Обнаружено, что эта проблема возникает, если вы пытаетесь нажать/закрыть контроллер просмотра во время предыдущей транзакции (анимации).

Возьмите NSTimer и отпустите контрольный контролер между 0.50 до 1 секунд. Это полезный трюк, поэтому ваш текущий viewController сделал свою анимацию.

В противном случае не уверен, но попробуйте установить НЕТ с dismissViewControllerAnimated.

[self dismissViewControllerAnimated:NO completion:nil]; 
+0

Я пробовал задержка по таймеру и отключил анимацию, и ошибка все еще возникает. –

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