У меня есть вид таблицы, который встроен внутри обычного контроллера представления (который встроен внутри навигационного контроллера.)IOS, Tableview не отображающие секции
Вообще говоря, вызывая методы, такие как tableView:numberOfRowsInSection:
, tableView:titleForHeaderInSection
и tableView:cellForRowAtIndexPath:
работают нормально, они видны и функционируют должным образом.
Теперь возникает проблема отображения разделов. По какой-то странной причине метод numberOfSectionsInTableview:
: не видно, когда программа запускается. Я проверил это, вставив NSLog
, а также вставив точки останова. Внутри этого метода ничего не распознается. При вызове для отображения разделов (я организую все это через NSFetchedResultsController
) он отображает только первую секцию, когда она в настоящее время должна отображать 5 (потому что numberOfSectionsInTableview
не требуется и по умолчанию равен 1.)
Я думаю, что это происходит из-за того, что мой tableView встроен в контроллер представления, а не на самом деле является контроллером tableview. Но если это так, почему мне не нужно делать что-то особенное для других методов tableView:
? Насколько я могу судить, sectionInfo часть кода (внутри NSFetchedResultsController) настроена правильно, так как другие section
методы работают должным образом (поместить NSLog
внутри каждого, чтобы убедиться, метод называется.)
Любая помощь вам может дать при понимании и/или исправлении этой проблемы, будем очень благодарны! Дайте мне знать, если вам нужна дополнительная информация о моем коде.
EDIT
Вот весь код, я использую, как он относится к этой области:
- (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];
}
К сожалению, 'tableView' является параметром ..' - (NSInteger) numberOfSectionsInTableview: (UITableView *) tableView {retrun [[self.fetchedResultsController sections] count]; 'Это полный метод, который я использую –
, вы уверены, что этот метод вызывается еще? Вы проверили, поставив точку останова? –
@ Да, я вставлял точки останова, а также вставил 'NSLog'. Это * не *, вызываемый, что является проблемой, с которой я сталкиваюсь. –