2012-09-17 10 views
1

Я искал SO, чтобы разрешить это, но я не нашел ничего, что решает мою проблему. Итак, вот в чем проблема:UIImagePickerController белый экран

Мое приложение иногда загружает белый экран, когда предполагается загрузить UIImagePickerController при нажатии кнопки.

Это проблема с памятью, так как это происходит только при срабатывании предупреждения о памяти. Похоже, что предупреждение о памяти освобождает исходный контроллер представления (тот, который загружает изображение), при переходе между двумя диспетчерами просмотра.

Это приводит к тому, что у него нет исходного контроллера представления и не загружается UIImagePickerController (так как у него нет родителя), другими словами, на белом экране.

Также стоит отметить, что я уволен предупреждений программно памяти до и после «представления» вк муравей не воспроизвести проблему:

[[UIApplication sharedApplication] _performMemoryWarning]; 
[self presentModalViewController:picker animated:YES]; 
[[UIApplication sharedApplication] _performMemoryWarning]; 

Любая помощь приветствуется!

+0

Прежде всего вы должны смотреть в использовании меньше памяти, проверьте, если вы чистите все свои ресурсы. Что произойдет, если вы упустите UIImagePickerController в didReceiveMemoryWarning? – ggfela

+0

Дело в том, что исходный vc не получает никаких предупреждений памяти. Любые идеи о том, как воспроизвести сценарий? – TompaLompa

+0

В симуляторе вы можете сделать Hardware -> Simulate Memory Warning – ggfela

ответ

0

Я бы тогда:

  1. Если вы можете проверить непосредственно: проверить в viewWillAppear, если загружен UIImagePicker и загрузить его вручную, если это необходимо.
  2. Если вы не можете проверить его напрямую: переопределите метод didReceiveMemoryWarning в вашем пользовательском подклассе UIViewController. Установите эту функцию булево как imagePickerNeedsReload = YES и проверить этот флаг в viewWillAppear, и они выполняют 1.
+0

Дело в том, что исходный vc не получает никаких предупреждений памяти. Любые идеи о том, как воспроизвести сценарий? – TompaLompa

+0

Напишите небольшое приложение, которое занимает тонну памяти в течение 20 секунд и запускает его непосредственно перед вашим. Вы наверняка получите предупреждение о памяти. –

+0

Вы можете wnt отслеживать цепочку вызовов для предупреждения из памяти делегата приложения вниз, чтобы просмотреть контроллеры, чтобы проверить, правильно ли установлено распространение событий, и все vc получает предупреждение –

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