1

NSFetchedResultsControllerを使用してUITableViewControllerのセクションヘッダーを作成する場合、fetchedResultsController.sectionsには、各セクションではなく各アイテムのオブジェクトがあります。NSFetchedResultsControllerセクションを作成する

//Set up the request 
NSManagedObjectContext *context = self.managedObjectContext; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

[fetchRequest setEntity:[NSEntityDescription entityForName:@"Person" 
            inManagedObjectContext:context]]; 

[fetchRequest setFetchBatchSize:20]; 

NSSortDescriptor *sortDescriptor = nil; 
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" 
              ascending:YES]; 
NSArray *sortDescriptors = nil; 
sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[sortDescriptor release]; sortDescriptor = nil; 

[fetchRequest setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; sortDescriptors = nil; 

//setup fetch results controller 
NSFetchedResultsController *controller = nil; 
controller = [[NSFetchedResultsController alloc] 
       initWithFetchRequest:fetchRequest 
       managedObjectContext:context 
       sectionNameKeyPath:@"firstName" 
         cacheName:@"PersonCache"]; 

__fetchedResultsController = controller; 

[fetchRequest release]; fetchRequest = nil; 

//IMPORTANT: Delete cache before changing predicate 
[NSFetchedResultsController deleteCacheWithName:nil]; 
NSError *error = nil; 
if (![controller performFetch:&error]) 
{ 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} else if ([[controller fetchedObjects] count] == 0){ 
    [self retrievePeoples]; 
} 

NSLog(@"result count: %i", [[controller fetchedObjects] count]); 
NSLog(@"section count: %i", [[controller sections] count]); 
NSLog(@"sectionIndexTitles count: %i", [[controller sectionIndexTitles] count]); 

これが返されます。

result count: 18 
section count: 18 
sectionIndexTitles count: 13 

は、セクション数とsectionIndexTitlesは試合を数えるべきではないでしょうか。 numberOfSectionsInTableView:とtableView:numberOfRowsInSection:メソッドが呼び出されると、追加の並べ替えを行わずにcount個のfetchedResultsController.sectionを見ることができます。

NSFetchResultsControllerを適切にセットアップして、sections配列内の各オブジェクトをセクションごとにし、すべてのオブジェクトではないようにするにはどうすればよいですか?

答えて

1

これは別のフォーラムでPhillip Millsによって回答されました。問題は、最初の文字だけでなく、セクション全体を作成するためにfirstName全体を使用していることでした。この問題を解決するには、エンティティを更新して、更新または変更するたびにセクションタイトルを作成します。 AppleのDateSectionTitlesには何をすべきかのサンプルがあります。

関連する問題