2012-03-14 5 views
1

Когда самое лучшее время для вызова [reloadData] в UITableView? viewDidAppear или viewWillAppear? Если выгрузите представление, будет ли выгружено базовое табличное представление?UITableView reloadData best practice

Причина, по которой я прошу, связана с каким-то поведением, которое я вижу. Предположим, что пользователю предлагается перезагрузить его источник данных, но он освобожден до его завершения. Сценарий будет с UITabBarController и перейти к другому представлению, чем выбранный ViewController. Так что происходит, что viewWillAppear вызывается, но viewDidAppear не делает (с тех пор, как я отплыл).

В результате ViewController получает освобождение (вместе с его данными модели), но если я вызываю reloadData в viewWillAppear, вызывается метод cellForRow и numberOfRows, который вызывает ошибку «deallocated instance». Имеет ли это смысл? Обычно вы вводите код, который проверяет значение nil, если модель может быть изменена в любое время, когда запрашивается представление?

+0

Это действительно зависит от того, чего вы пытаетесь достичь. – Gobot

+0

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

+0

Что именно снимается? Вид таблицы обычно не удалялся из памяти только потому, что вы перешли на другую вкладку, и сам контроллер представления не освобождался просто потому, что его просмотр был выгружен. Какая катастрофа вы видите? – jrturton

ответ

0

Я бы загрузил таблицу после загрузки представления, она позволяет создавать все объекты UIO, прежде чем возиться с ними. Не уверен, но я считаю, что таблица автоматически выгружается с помощью супервизора.

Взгляните на этот вопрос >>> Objective C - Correct way to empty and reload UITableViewController with NSMutableArray

+0

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

0

прежде чем вы получите источник данных с сервера или в любом месте, вы можете отобразить TableView с blankcell (клетка, вы можете рисовать STH как 404 веб-страницы) , когда вы получите данные, а затем перезагрузите tableview. Не забудьте установить номер ячейки в ячейку 1 для пустой ячейки