【问题标题】:NSFetchedResultsController Creating SectionsNSFetchedResultsController 创建部分
【发布时间】:2011-08-14 16:09:09
【问题描述】:

当使用 NSFetchedResultsController 为 UITableViewController 创建节标题时,fetchedResultsController.sections 对每个项目而不是每个节都有一个对象。

//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 以使 section 数组中的每个对象都用于每个部分而不是所有对象?

【问题讨论】:

    标签: iphone objective-c core-data uitableview nsfetchedresultscontroller


    【解决方案1】:

    菲利普米尔斯在另一个论坛上回答了这个问题。问题是我使用整个名字来创建部分(不仅仅是第一个字母)。修复是更新实体以在更新或更改时创建节标题。 Apple 的 DateSectionTitles 有一个示例。

    【讨论】:

      猜你喜欢
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2012-12-30
      相关资源
      最近更新 更多