0

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;
}

助けてくれてありがとう。

さらにコードが必要な場合は、表示できます。

4

1 に答える 1

0

workoutSet.days順序付けられていないコレクションであるため、セルを構成するたびに、アイテムがランダムな順序で取得されます。の適切なオブジェクトを返すように FRC に依頼する必要がありますindexPath

于 2013-08-20T18:38:26.433 に答える