2016-11-01 19 views
0

私は、フェッチされた結果コントローラによって管理されるテーブルビューを持っています。 私がしたいのは、ユーザーがセグメント化されたコントロールをタップしたときのソート順を変更することです。 これは私がフェッチ結果コントローラの作成方法です。しかし、その動作しないReload fetchedResultsController data

- (IBAction)sortOrderChanged:(id)sender { 

    UISegmentedControl *sc = sender; 
    if (sc.selectedSegmentIndex == 0){ 
     self.sortOrder = tableSortServer; 
     [self.tableView reloadData]; 
    } else { 
     self.sortOrder = tableSortDate; 
     [self.tableView reloadData]; 
    } 

} 

:私はセグメント化されたコントローラのコールバックメソッドで

- (NSFetchedResultsController *)frc { 

    if (_frc != nil) { 
     return _frc; 
    } 

    NSString *sortCase; 
    switch (self.sortOrder) { 
     case tableSortServer: 
      sortCase = [NSString stringWithFormat:@"%@", CD_SORT]; 
      break; 

     case tableSortDate: 
      sortCase = [NSString stringWithFormat:@"%@", CD_DATE]; 
      break; 

     default: 
      sortCase = [NSString stringWithFormat:@"%@", CD_SORT]; 
      break; 
    } 


    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:CD_ENTITY_NAME inManagedObjectContext:self.getManagedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] 
           initWithKey:sortCase ascending:NO]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 

    [fetchRequest setFetchBatchSize:BATCH_SIZE]; 

    NSFetchedResultsController *theFetchedResultsController = 
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
             managedObjectContext:self.getManagedObjectContext sectionNameKeyPath:nil 
                cacheName:@"Root"]; 
    self.frc = theFetchedResultsController; 
    _frc.delegate = self; 

    return _frc; 

} 

を。その仕事を達成するには? (別のソート順のテーブルをリロードする)?

答えて

1

多分これはあなたがテーブルをリロードするため

if (_frc != nil) { 
    return _frc; 
} 

です。古いフェッチ結果コントローラを使用します。したがって、self.sortOrder = tableSortServerは考慮されません。

+0

私は似たセットアップをしています。@Andreyによると、あなたのソートキーが変わるたびに新しい 'FRC'が必要です。 –