Предупреждение: попытка представить uiimagepickercontroller во время презентации

После выключения камеры. Он выдает мне это предупреждение: Попытка презентации во время презентации!

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

Я не знаю, является ли это большой проблемой.

Больше кода:

- (void) viewWillAppear:(BOOL)animated
{
    [self takePicture];
}


- (void) takePicture
{
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        [imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera];
    } else
        [imagePickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];

    imagePickerController.delegate = self;
    [self presentViewController:imagePickerController animated:YES completion:nil];
}


- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [self dismissViewControllerAnimated:NO completion:nil];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [self dismissViewControllerAnimated:NO completion:nil];
}

Кстати, «dismissModalViewController» устарел.

Исправление: ViewWillAppear будет вызываться при появлении нового представления. Это проблема


person Bill    schedule 08.10.2013    source источник
comment
Пожалуйста, включите больше деталей в свой вопрос.   -  person Ravi    schedule 08.10.2013
comment
Документация говорит вам использовать dismissModalViewControllerAnimated:, вы были нажаты Alt+щелчок рядом с ответом. Прочтите документацию.   -  person A-Live    schedule 08.10.2013
comment
@A-Live dismissModalViewControllerAnimated: устарел в пользу dismissViewControllerAnimated:completion:. Он использует правильный.   -  person Kevin    schedule 08.10.2013
comment
@Kevin, этот метод устарел, но в документации четко указано, что его следует использовать. Фактическая разница была бы хорошим вопросом.   -  person A-Live    schedule 09.10.2013
comment
@A-Live Какую документацию вы просматриваете? в документах UIViewController четко указано, что в iOS 6.0 он не рекомендуется. Вместо этого используйте команду rejectViewControllerAnimated:completion:.   -  person Kevin    schedule 09.10.2013
comment
@Kevin Проверьте документацию imagePickerControllerDidCancel:.   -  person A-Live    schedule 09.10.2013
comment
@ A-Live просто старая перекрестная ссылка, которая никогда не обновлялась.   -  person Kevin    schedule 09.10.2013
comment
@Kevin, это было бы так, если бы новый метод не выдавал предупреждение от OP. В этом случае я вижу вескую причину использовать устаревший метод, пока проблема не будет устранена Apple.   -  person A-Live    schedule 10.10.2013
comment
@A-Live Я использую новые методы для представления и закрытия своих ImagePickers, проблема не в них. Проблема здесь в том, что в какой-то момент он пытается представить дважды, дважды отклонить или отклонить, продолжая презентовать.   -  person Kevin    schedule 10.10.2013


Ответы (2)


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

Вызовите takePicture из viewDidAppear, потому что viewDidAppear будет вызван после завершения представления контроллера.

- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self takePicture];
}

Надеюсь, что это поможет вам.

person PKN    schedule 24.10.2013
comment
ViewDidAppear - это проблема. Потому что каждый раз, когда я добавляю новое представление в контроллер представления, вызывается этот метод. Поэтому я добавил BOOL firstTimeRun, чтобы исправить это. - person Bill; 24.10.2013
comment
ПОЛНОЕ РЕШЕНИЕ ЗДЕСЬ, ответ Джона: заголовок stackoverflow.com/questions/14453001/ - person Fattie; 24.01.2014

Вы, вероятно, представили какой-то контроллер вида, подобный этому

[self presentViewController:someVC animated:YES completion:nil];

и до того, как анимация будет завершена, ваш метод ниже вызывается

imagePickerControllerDidCancel

Вы можете проверить это, изменив его на

[self presentViewController:someVC animated:NO completion:nil];

обратите внимание на анимацию: НЕТ выше.

person msk    schedule 08.10.2013
comment
Единственный представленный ранее VC — это UIImagePickerController. Предупреждение появляется после того, как я нажимаю «Возврат» в контроллере выбора. @мск - person Bill; 08.10.2013
comment
покажите нам код, в котором вы представляете UIImagePickerController, а также некоторый другой код. - person msk; 08.10.2013