Дескриптор сортировки Не работает правильно или последовательно

Я использую дескриптор сортировки и предикат набора между 4 объектами.

сущность один: workoutType Отношения тренировки 1 ко многим сущностям два: workoutSet Отношения дни 1 ко многим сущностям три: отношения workoutDay упражняются 1 ко многим сущностям четыре: workoutExercise

Инверсы тоже установлены.

Проблема, которую я получаю, состоит в том, что sortDescriptor работает правильно за кулисами, но то, что отображается, неверно.

Например, в моей сущности workoutDay у меня есть атрибут dayName типа string.

сохраненные значения: день 1, день 2, день 3.

при запуске показываются значения в табличном виде: день 1, день 3, день 2.

Когда я нажимаю на дни сверху вниз:

день 1.... контроллер следующего вида показывает правильные данные дня 1.

день 3.... контроллер следующего вида показывает данные дня 2 (не дня 3).

день 2.... контроллер следующего вида показывает данные дня 3 (не дня 2).

Таким образом, дескриптор сортировки работает, но то, что показано, не соответствует тому, что выбирается.

Код:

-(void)fetchWorkoutDays
{
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"WorkoutDay"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"workoutSet = %@", self.workoutSet];
    [fetchRequest setPredicate:predicate];
    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dayName" ascending:YES];
    [fetchRequest setSortDescriptors:@[sortDescriptor]];
    self.fetchedResultsController = [[NSFetchedResultsController alloc]
                                 initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext
                                 sectionNameKeyPath:nil cacheName:nil];
    //self.fetchedResultsController.delegate = self;
    NSError *error;
    if (![self.fetchedResultsController performFetch:&error])
    {
        NSLog(@"Fetch failed: %@", error);
    }

 }


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
     static NSString *CellIdentifier = @"Cell";
     UITableViewCell *cell =
     [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil)
     {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                                  reuseIdentifier:CellIdentifier];
         cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
     }
     WorkoutDay *day = [self.workoutSet.days.allObjects objectAtIndex:indexPath.row];

     cell.textLabel.text = day.dayName;
     return cell;
}

Спасибо за любую помощь.

Если какой-либо код требуется, я могу показать это.

1 ответ

workoutSet.days это упорядоченная коллекция, поэтому каждый раз, когда вы настраиваете ячейку, вы получаете элементы в случайном порядке. Вы должны попросить FRC вернуть вам соответствующий объект для indexPath,

Другие вопросы по тегам