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有一個可以做什麼的樣本。