Странное предупреждение об отказе от модального контроллера
Я работаю над iOS 6.
Мое приложение имеет стандартный контроллер навигации со встроенным CustomViewController.
В этом контроллере я создаю модальное представление, подобное этому:
-(IBAction)presentModalList:(id)sender {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
StationsListViewController *list = [storyboard instantiateViewControllerWithIdentifier:@"StationsListViewController"];
[list setStationsData: [self.stationsData allValues]];
[self presentModalViewController:list animated:YES];
}
Модальный контроллер отображается отлично, но увольнение генерирует предупреждение.
Метод уклонения в этом контроллере:
-(IBAction)backToMap
{
[self dismissModalViewControllerAnimated:YES];
}
Сгенерированное предупреждение: Предупреждение:
Попытка отклонить из контроллера представления < UINavigationController: 0x1ed91620 > пока выполняется презентация или увольнение!
Любые подсказки об этом?
Спасибо
Ответы
Ответ 1
Я понимаю, что это поздний ответ, но, возможно, это поможет кому-то еще найти решение этого вопроса, вот что я сделал:
-(IBAction)backToMap
{
if (![[self modalViewController] isBeingDismissed])
[self dismissModalViewControllerAnimated:YES];
}
Для меня я обнаружил, что строка кода вызывается несколько раз, я не мог понять, почему это было самым простым исправлением.
Ответ 2
Спасибо JDx за то, что вы на правильном пути. Я адаптировал его для формирования этого решения, которое удалит предупреждение без использования функций, которые устарели в iOS 6:
-(IBAction)backToMap
{
if (![self.presentedViewController isBeingDismissed]) {
[self dismissViewControllerAnimated:YES completion:^{}];
}
}
Ответ 3
Я нашел этот подход ненадежным - скажем, один случай из пяти, я все еще вижу ошибку.
Мое решение состояло в том, чтобы использовать блок завершения для установки флага, который контролирует, безопасно ли его отклонять - таким образом вам не нужно проверять, отклонено ли представление.
-(IBAction)presentModalView:(id)sender {
:
self.canDismiss = NO;
[self presentViewController:aVC animated:YES completion:^{
self.canDismiss = YES;
}];
:
}
В бит кода, в котором происходит отклонение, просто отметьте флаг:
-(void)dismisser {
:
if (self.canDismiss) {
[self dismissViewControllerAnimated:YES completion:nil];
}
:
}
Hey presto, больше ошибок!
Ответ 4
Ориентация на iOS6, это то, что сработало для меня:
if (![self.presentedViewController isBeingDismissed])
[self.presentedViewController dismissViewControllerAnimated:YES
completion:nil];
Ответ 5
Вы можете делать все, что захотите, после завершения метода увольнения, как:
-(IBAction)backToMap
{
[self dismissViewControllerAnimated:YES
completion:^{
//Do something here
}];
}