Представление контроллера модального представления после увольнения другого

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

Предупреждение: Попытайтесь закрыть из контроллера представления, пока выполняется презентация или закрытие!

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{
if (!self.submitPicturesDetailsViewController)
{
    self.submitPicturesDetailsViewController = [[SubmitPictureDetailsViewController alloc] initWithPicture: lPicture];
}
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
    [self.submitPicturesDetailsViewController setModalPresentationStyle:UIModalPresentationFormSheet];
    [self.popOver dismissPopoverAnimated:YES];
    [self presentViewController: self.submitPicturesDetailsViewController animated:YES completion: nil];
}else
{
    //[self performSelector:@selector(present) withObject: nil afterDelay: 5.0];
    [self dismissViewControllerAnimated:NO completion:^{
        [self presentViewController: self.submitPicturesDetailsViewController animated:YES completion: nil];
    }];
}
}

Я пытался:

[self performSelector:@selector(present) withObject: nil afterDelay: 5.0];

И он работает правильно, поэтому очевидно, что блок завершения не работает должным образом.


person Joe Fratianni    schedule 22.02.2014    source источник
comment
Проверьте ответ здесь, ответьте на аналогичный вопрос здесь, stackoverflow.com/a/3919894/2458651   -  person zaheer    schedule 22.02.2014
comment
@zaheer Этот ответ относится к 2010 году и касается другого API. Начиная с iOS5, блок завершения передается в новый API, который позволяет объединять анимации в цепочку. Приведенный выше код должен работать, но не работает.   -  person Leo Natan    schedule 22.02.2014
comment
Я сам это проверил, создав фиктивный проект. это сработало. не могу найти причину такой проблемы. Я думаю, что единственный вариант, который у вас остался, - это вызов селектора с задержкой в ​​1 секунду.   -  person santhu    schedule 22.02.2014


Ответы (1)


Лучшее надежное решение, которое я нашел, - это рекурсивный вызов моего метода до тех пор, пока предыдущий контроллер представления не перестанет загружаться.

- (void) present
{
    if (!self.submitPicturesDetailsViewController.isViewLoaded) {
        [self presentViewController: self.submitPicturesDetailsViewController animated:YES completion: nil];
    }else{
        [self performSelector:@selector(present) withObject: nil afterDelay: 0.1];
    }
}
person Joe Fratianni    schedule 10.06.2014