Почему переупорядочение моего tableView портит мои данные? - PullRequest
0 голосов
/ 24 апреля 2011

У меня есть два разных табличных представления, в которых я использую один и тот же код в tableView:MoveRowAtIndexPath:ToIndexPath: для поддержки переупорядочения строк пользователем. Один из этих tableViews работает отлично. Другой, однако, запутывается и начинает отображать одно и то же подпредставление, независимо от того, какая строка выбрана, то есть его индексация строк, похоже, испортилась.

Я временно исправил это, добавив [tableView reloadData] в конце метода MoveRowAtIndexPath, но я не понимаю, почему он не работал с самого начала - особенно с другой точки зрения с точно таким же Код работает отлично. Очевидно, что в этом контроллере представления должен быть другой метод, который его портит, но я не знаю, где искать.

Вот код, который одинаков для обоих:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {  
    userDrivenDataModelChange = YES;

    NSMutableArray *things = [[fetchedResultsController fetchedObjects] mutableCopy];   
    NSManagedObject *thing = [[self fetchedResultsController] objectAtIndexPath:fromIndexPath];   
    [things removeObject:thing];
    [things insertObject:thing atIndex:[toIndexPath row]];

    int i = 0;
    for (NSManagedObject *mo in things)
    {
        [mo setValue:[NSNumber numberWithInt:i++] forKey:@"displayOrder"];
    }

    [things release], things = nil;

    [managedObjectContext save:nil];
    userDrivenDataModelChange = NO;
}

(Для чего это стоит, то, что работает, является дочерним представлением того, которое не работает, и они находятся во многих Базовых данных).

Ответы [ 2 ]

0 голосов
/ 25 апреля 2011

Я забыл, что я использовал настраиваемую ячейку в родительском представлении, и что пользователь нажимает кнопку UIB внутри ячейки, а не в самой ячейке. У пользовательской ячейки есть индексный путь, установленный как свойство tableView:cellForRowAtIndexPath:, которое, конечно, никогда не будет вызываться снова после перемещения ячеек таблицы. Следовательно, мне пришлось добавить [tableView reloadData], чтобы убедиться, что клетки обновляются.

0 голосов
/ 25 апреля 2011

Используйте разные идентификаторы для каждого просмотра таблицы в

  • (UITableViewCell *) dequeueReusableCellWithIdentifier: (NSString *) идентификатор

Если вы используете одну и ту же строку идентификатора, они будут извлекать объекты кэшированных ячеек друг друга и отображать противоречивые данные.

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