4 つのエンティティ間でソート記述子とセット述語を使用しています。
エンティティ 1:workoutType 関係のワークアウト 1 対多 エンティティ 2:workoutSet 関係の日数 1 対多 エンティティ 3:workoutDay 関係の演習 1 対多 エンティティ 4:workoutExercise
逆子も設定されています。
私が受けている問題は、sortDescriptor が舞台裏で正しく機能していることですが、表示される内容が正しくないということです。
たとえば、私の運動日エンティティには、文字列型の属性 dayName があります。
保存された値: 1 日目、2 日目、3 日目。
テーブルビューに表示された値を実行すると、1日目、3日目、2日目。
上から下に日をクリックすると:
1日目....次のView Controllerは正しい1日目のデータを表示します。
3日目....次のView Controllerは2日目のデータを表示します(3日目ではありません)。
2日目....次のView Controllerは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;
}
助けてくれてありがとう。
さらにコードが必要な場合は、表示できます。