Я всегда добавляю/? параметр для получения справки и я всегда пытаюсь иметь значение по умолчанию (т.е. наиболее распространенный сценарий) реализация.
Иначе я склонен использовать "/x" для переключателей и "/x:value" для переключателей, которые требуют, чтобы значения были переданы. Делает довольно легким проанализировать параметры с помощью регулярных выражений.
Я взглянул на ваш код, и он может работать лучше:
- (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];
}
(Это предназначено как комментарий к ответу gerry3 выше, но я пока не могу комментировать вопросы и ответы других пользователей).
Небольшое улучшение для очень элегантного решения gerry3. Если я не ошибаюсь, строка
otherObject.displayOrderValue += delta;
будет фактически выполнять арифметику указателя, если displayOrderValue
не примитивного типа. Что может оказаться не тем, что вам нужно. Вместо этого, чтобы установить значение сущности, я предлагаю:
otherObject.displayOrderValue = [NSNumber numberWithInt:[otherObject.displayOrderValue intValue] + delta];
Это должно правильно обновить свойство сущности и избежать сбоев EXC_BAD_ACCESS.