UITableViewCell не обновляется при отображении? - PullRequest
1 голос
/ 22 ноября 2010

У меня действительно странная проблема с UITableView / UITableViewCells.

У меня есть UITableView в простом стиле, который отображает список объектов (для аргумента, скажем, MenuItemsViewController), у которого есть дочерний объект с именем ItemViewController. MenuItemsViewController просто изменяет свойство menuItem в ItemViewController, когда пользователь выбирает объект в MenuItemsViewController.

Когда пользователь выбирает свой первый элемент, все отображается нормально. Однако при последующем выборе других элементов данные в первом разделе ItemViewController не изменяются, т. Е. По-прежнему отображаются свойства самого первого элемента. Я установил точки останова в конце моих методов tableView:cellForRowAtIndexPath: и tableView:willDisplayRowAtIndexPath:, и запрос ячеек по мере их отображения показывает, что свойства textLabel / detailTextLabel все верны - то есть внутренне они имеют именно то состояние, в котором они должны быть. Однако UITableView по-прежнему не отображает правильную информацию.

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

редактировать: и видео - http://www.youtube.com/watch?v=AwHTaHCQtX8&feature=youtube_gdata_player

РЕДАКТИРОВАТЬ # 2: Итак, это безумие: после 6 часов подряд отладки и тестирования выясняется, что проблема с анимацией вызвана вызовом метода получения для NSManagedObject, который является ошибочным ... 1015 * идея почему. Никто. Я полагаю, что сейчас это вопрос базовых данных, поэтому я добавляю его в виде тега.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2010

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

Итак, давайте начнем там. Можете ли вы подтвердить, что на самом деле это то, что вы делаете? Если нет, то почему?

0 голосов
/ 22 ноября 2010

Вы должны указать представлению таблицы, что его содержимое изменилось.Возможным решением было бы добавление [self.tableView reloadData] к методу viewWillAppear: ItemViewController.

Но я настоятельно рекомендую переопределить свойство menuItem и добавить код для перегрузки только измененных ячеек / секций, используя reloadRowsAtIndexPaths:withRowAnimation: / reloadRowsAtIndexPaths:withRowAnimation:соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...