我在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;
}
感谢您的帮助。
如果需要更多代码,我可以显示它。
答案 0 :(得分:0)
workoutSet.days
是一个不修订的集合,因此每次配置单元格时,您都会以随机顺序获取项目。您应该要求FRC为您返回indexPath
的适当对象。