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:方法时,我应该只需要查看fetchedResultsController.section即可进行计数,而无需进行任何其他排序。

如何正确设置NSFetchResultsController以使节数组中的每个对象适用于每节而不是所有对象?

回答

1

这是在另一个论坛上由Phillip Mills回答的。问题是我正在使用整个名字创建部分(不只是第一个字母)。修复方法是更新实体以在更新或更改时创建节标题。 Apple的DateSectionTitles有一个可以做什么的样本。