排序描述符无法正常或一致地运行

时间:2013-08-20 18:32:14

标签: ios tableview nspredicate nssortdescriptor

我在4个实体之间使用排序描述符和设置谓词。

实体一:workoutType 关系训练1对多 实体二:workoutSet 关系日1到很多 实体三:workoutDay 关系练习1对多 实体四:exerciseExercise

也设置了反转。

我收到的问题是sortDescriptor在幕后正常工作,但显示的内容不正确。

例如,在我的workoutDay实体中,我有字符串类型的dayName属性。

储存值:第1天,第2天,第3天。

在tableview中运行显示的值:第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 个答案:

答案 0 :(得分:0)

workoutSet.days是一个不修订的集合,因此每次配置单元格时,您都会以随机顺序获取项目。您应该要求FRC为您返回indexPath的适当对象。