我有一个嵌入在常规视图控制器中的表格视图(嵌入在导航控制器中。)
一般来说,调用tableView:numberOfRowsInSection:
,tableView:titleForHeaderInSection
和tableView:cellForRowAtIndexPath:
工作正常的方法,它们被看到并正常运行....
现在出现了显示部分的问题。由于某种奇怪的原因,程序运行numberOfSectionsInTableview:
时没有看到该方法。我已经通过插入NSLog
's 以及插入断点来对此进行测试。此方法内没有识别任何内容。当调用显示部分时(我正在组织它NSFetchedResultsController
),它只显示当前应该显示 5 的第一部分(因为numberOfSectionsInTableview
不是必需的,默认为 1。)
我认为这是因为我的 tableView 嵌入在视图控制器中,而不是它实际上是一个 tableview 控制器。但如果是这样的话,为什么我不需要为其他tableView:
方法做任何特别的事情呢?据我所知,代码的 sectionInfo 部分(在 NSFetchedResultsController 内)设置正确,因为其他section
方法正常工作(放入NSLog
每个方法以确保调用该方法。)
非常感谢您在理解和/或纠正此问题方面提供的任何帮助!如果您需要有关我的代码的更多信息,请告诉我。
编辑
这是我使用的与该字段相关的所有代码:
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController == nil) {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"ActiveList" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"category" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil]];
//[fetchRequest setSortDescriptors:@[ sortDescriptor1, sortDescriptor2 ]];
// Only retrieves items where 'isActive' SQLite field is '1' or 'YES'
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isActive == %@", [NSNumber numberWithBool:YES]];
[fetchRequest setPredicate:predicate];
[fetchRequest setFetchBatchSize:20];
fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:@"category"
cacheName:@"ActiveLists"];
fetchedResultsController.delegate = self;
}
return fetchedResultsController;
}
- (void)performFetch {
NSError *error;
if (![self.fetchedResultsController performFetch:&error]) {
FATAL_CORE_DATA_ERROR(error);
return;
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self performFetch];
}
- (NSInteger)numberOfSectionsInTableview:(UITableView *)tableView {
return [[self.fetchedResultsController sections] count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo name];
}