Как я могу поддержать порядок дисплея в UITableView с помощью Базовых Данных?

Я всегда добавляю/? параметр для получения справки и я всегда пытаюсь иметь значение по умолчанию (т.е. наиболее распространенный сценарий) реализация.

Иначе я склонен использовать "/x" для переключателей и "/x:value" для переключателей, которые требуют, чтобы значения были переданы. Делает довольно легким проанализировать параметры с помощью регулярных выражений.

11
задан Peter Hosey 9 November 2009 в 01:36
поделиться

2 ответа

Я взглянул на ваш код, и он может работать лучше:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {         

    NSUInteger fromIndex = fromIndexPath.row;  
    NSUInteger toIndex = toIndexPath.row;

    if (fromIndex == toIndex) {
        return;
    }

    FFObject *affectedObject = [self.fetchedResultsController.fetchedObjects objectAtIndex:fromIndex];  
    affectedObject.displayOrderValue = toIndex;

    NSUInteger start, end;
    int delta;

    if (fromIndex < toIndex) {
        // move was down, need to shift up
        delta = -1;
        start = fromIndex + 1;
        end = toIndex;
    } else { // fromIndex > toIndex
        // move was up, need to shift down
        delta = 1;
        start = toIndex;
        end = fromIndex - 1;
    }

    for (NSUInteger i = start; i <= end; i++) {
        FFObject *otherObject = [self.fetchedResultsController.fetchedObjects objectAtIndex:i];  
        NSLog(@"Updated %@ / %@ from %i to %i", otherObject.name, otherObject.state, otherObject.displayOrderValue, otherObject.displayOrderValue + delta);  
        otherObject.displayOrderValue += delta;
    }

    [self FF_fetchResults];  
}
27
ответ дан 3 December 2019 в 02:52
поделиться

(Это предназначено как комментарий к ответу gerry3 выше, но я пока не могу комментировать вопросы и ответы других пользователей).

Небольшое улучшение для очень элегантного решения gerry3. Если я не ошибаюсь, строка

otherObject.displayOrderValue += delta;

будет фактически выполнять арифметику указателя, если displayOrderValue не примитивного типа. Что может оказаться не тем, что вам нужно. Вместо этого, чтобы установить значение сущности, я предлагаю:

otherObject.displayOrderValue = [NSNumber numberWithInt:[otherObject.displayOrderValue intValue] + delta];

Это должно правильно обновить свойство сущности и избежать сбоев EXC_BAD_ACCESS.

2
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: