Приложение iOS вылетает при попытке вставить новую строку в UITableView - PullRequest
0 голосов
/ 28 августа 2011
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:YES];
[self.tableView endUpdates];

Этот фрагмент кода завершает работу моего приложения iOS и возвращает следующую ошибку:

Неверное обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (0), должно быть равно количеству строк, содержащихся в этом разделе до обновления (0) , плюс или минус количество строк, вставленных или удаленных из этого раздела (1 вставлено, 0 удалено).

Может кто-нибудь сказать мне, почему? И почему это говорит о том, что число строк после обновления равно нулю, когда одновременно говорится: 1 вставлено , 0 удалено ?

Обновление

Приведенный выше код срабатывает, когда я получаю push-уведомление во время выполнения. Когда это происходит, делегат добавляет полученные данные в словарь, хранящийся в файле .plist (которым табличное представление использует для заполнения своих ячеек), а затем вызывает пользовательский метод в RootViewController, где находится табличное представление. Этот метод выполняет приведенный выше код с последующим сбоем. Однако, когда я регистрирую [theDictionary count] в - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section, число увеличивается так же, как и вправо до сбоя.

Также стоит отметить, что когда я регистрирую self.tableview, я получаю другой «адрес памяти» от RootViewController, когда он загружается при запуске и при получении push-уведомления. Может быть, это как-то связано с этим?

Это мой - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section метод:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [theDictionary count];
}

И картинка ошибки:

error

1 Ответ

5 голосов
/ 28 августа 2011

Метод numberOfRowsInSection должен возвращать правильное количество строк всякий раз, когда вы вносите какие-либо изменения в источник данных табличного представления.

Например, если общее количество строк в таблице равно 5, и если вы собираетесь добавить еще одну строку, то метод numberOfRowsInSection должен вернуть 6.

Его легко достичь, имея данные в array или dictionary. Если вы хотите добавить или удалить строки, просто обновите массив или словарь. И просто верните [array count] или [dictionary count] из numberOfRowsInSection метода.

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