Многократная проверка в длинном секционном UITableView - PullRequest
2 голосов
/ 16 января 2012

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

Один из способов действий, которые приводят к сбою: проверьте ячейку 1 в разделе 1 и ячейку 2 в разделе 2, затем снимите флажок ячейка 1 в разделе 1.Пример: здесь , пожалуйста, проверьте его, он слишком легкий, отслеживая сбой с точкой останова, я обнаружил, что этот метод вызывает проблему:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSDictionary *dict = [self.tableData objectAtIndex:[self tableIndexFromIndexPath:indexPath]];//this statement is the issue, i think the app is conflicting between sections when check/uncheck cells
    BOOL newState = ![[dict objectForKey:kCellStateKey] boolValue];
    NSDictionary *newDict = [NSDictionary dictionaryWithObjectsAndKeys:[dict objectForKey:kCellTextKey], kCellTextKey, [NSNumber numberWithBool:newState], kCellStateKey, nil];
    [self.tableData replaceObjectAtIndex:indexPath.row withObject:newDict];

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
}

Мне действительно нужен ваш опыт, чтобыулучшить мой кодСпасибо заранее.

1 Ответ

0 голосов
/ 26 января 2012

Таблица по какой-то причине не любит замену DICT, даже если она размещена правильно. Это будет работать.

1) Изменить все Dicts на MutableDicts

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    NSMutableDictionary *dict = [self.tableData objectAtIndex : [self tableIndexFromIndexPath : indexPath]];

    BOOL newState = ![[dict objectForKey:kCellStateKey] boolValue];

    [dict setValue :[NSNumber numberWithBool:newState] forKey : kCellStateKey];

    NSArray *test = [[NSArray alloc]initWithArray : [NSArray arrayWithObject:indexPath] ];

    [tableView reloadRowsAtIndexPaths : test withRowAnimation:UITableViewRowAnimationNone];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...