Проблема прокрутки UITableView после предупреждения о памяти - PullRequest
1 голос
/ 30 сентября 2010

Я создал UITableView, похожий на адресную книгу iOS, который позволяет вам выбирать изображение в одной строке, и есть дополнительные пользовательские ячейки, которые имеют текстовые поля для ввода данных.Я сталкиваюсь с этой проблемой только после загрузки большого изображения и получаю предупреждение памяти в консоли:

Получено предупреждение памяти.Уровень = 1

Я загружаю изображение, используя UIImagePickerController в модальном представлении.

Итак, когда появляется предупреждение о памяти, мой родительский tableviewcontroller выполняет viewDidUnload, который пуст:

- (void)viewDidUnload { }

Как только я закрываю модальное представление (выбор изображения), табличное представление перезагружает данныеи все выглядит нормально ... Однако прокрутка не работает должным образом.Поведение очень странное: прокрутка не останется за определенной точкой.Я могу буквально потянуть прокрутку вниз до конца, но как только я отпущу, прокрутка отскакивает назад и скрывает нижние ячейки fiew (которые кажутся нормальными).

За свою жизнь я не могу понять, что происходит, почему это происходит только после предупреждения о памяти.

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

Ответы [ 3 ]

1 голос
/ 27 ноября 2011

У меня есть работа вокруг. Перед тем, как отобразить модальное представление, вы должны распустить клавиатуру и подождать, пока она не распустится.

0 голосов
/ 27 ноября 2011

Установка пустого значения -(void)viewDidUnload; определенно неверна в этом контексте, так как должен быть хотя бы вызов [super viewDidUnload];, иначе у вас будет две таблицы в представлении (или даже больше), потому что контроллер продолжит создавать их внутрииз -(void)loadView;

0 голосов
/ 30 сентября 2010

Все, что вы настроили в [loadView] или [viewDidLoad], должно быть очищено в [viewDidUnload].И наоборот: все, что вы уничтожаете в [viewDidUnload], должно быть заново создано и повторно инициализировано в [loadView] или [viewDidLoad].

Вы должны рассматривать это как вторичную последовательность init / dealloc.

...