Таблица iPhone не создает ячейку для добавленной строки - PullRequest
0 голосов
/ 12 февраля 2010

У меня есть БД SQLite, содержащая задачи.У каждой задачи есть дата, и может быть несколько задач на дату.

Мое приложение загружает данные за один месяц только в изменяемый словарь.Ключ каждого элемента словаря - это строка дня месяца (1, 2, 3 ... 31).Соответствующее значение представляет собой массив задач на эту дату.Таким образом, для каждого дня месяца существует массив из 0 или более задач.

Изменяемый словарь объявлен в корневом viewcontroller.Корневой viewcontroller в Интерфейсном Разработчике является источником данных и делегатом табличного представления.Каким-то образом приложение знает, что корневой viewcontroller получает свои данные из изменяемого словаря.Я не уточняю это, поэтому мне интересно, что произойдет, если будет более одного словаря или, может быть, словарь и изменяемый массив?Тем не менее, это работает без дополнительной проводки.Когда корневой viewcontroller загружает данные в таблицу, каждый заголовок раздела содержит дату в качестве своего текста и перечисляет все задачи в отдельных ячейках внизу.Некоторые заголовки не имеют ячеек.

Теперь, чтобы изменить задачу, у меня есть «входной» view-контроллер.Выбор задачи в таблице приводит к тому, что viewcontroller для записи загружает информацию о задаче в текстовые поля, где я могу изменить заголовок, дату, детали или пометить ее как выполненную.После редактирования запись viewcontroller выгружается, корневой (табличный) viewcontroller перезагружается, таблица viewView вызывает reloadData, и изменения становятся очевидными.

ЗДЕСЬ ПРОБЛЕМА: если я добавлю новую задачу, нажав кнопку + наNav контроллер, он ведет меня к той же записи viewcontroller, где я устанавливаю данные.Я возвращаюсь к корневому viewcontroller теми же методами, что и при редактировании существующих данных.Еще не было создано ни одной новой ячейки для новых данных!Если я закрою и снова открою приложение, новые данные отобразятся правильно.

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

Сводка: отредактируйте существующий элемент массива, и новые данные отобразятся, когда таблица перезагрузит свои данные.Добавьте элемент массива, и он будет игнорироваться при перезагрузке таблицы.

Что не так?

1 Ответ

3 голосов
/ 12 февраля 2010

Вы можете добавить такую ​​строку в вашем UITableViewController:

[self.tableView reloadData];

Это приведет к перезагрузке всего UITableView. Тем не менее, я считаю, что предпочтительный метод:

[self.tableView insertRowsAtIndexPaths: indexPaths withRowAnimation: YES];

Чтобы это работало, вам нужно знать, где появятся строки (массив NSIndexPaths).

Может быть проще обновить UITableViewController из «входного» ViewController.

...