Ho un'entità che viene visualizzata in una vista tabella in una sola sezione. L'entità ha due attributi, workoutName
e trainingLevel
. Entrambi sono di tipo stringa. Il livello di allenamento è composto dai 3 tipi: 1, 2, 3. (trainingLevel = (intero 16 o tipo stringa? Quale sarebbe l'ideale?) Vorrei dividere il tavolo in tre sezioni, ciascuna sezione contenente voci per il corrispondente livello di allenamento .?iOS UITableView sezioni con fetchedResultsController confusione
come faccio a fare questo il codice attualmente sto usando è qui sotto:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return self.workoutType.workouts.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
WorkoutSet *workoutSet = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = workoutSet.workoutName;
cell.detailTextLabel.text = [NSString stringWithFormat:@"(%d)", workoutSet.days.count];
}
-(void)fetchWorkoutSets
{
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"WorkoutSet"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"workoutType = %@", self.workoutType];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"workoutName" ascending:YES];
[fetchRequest setSortDescriptors:@[sortDescriptor]];
[fetchRequest setPredicate:predicate];
self.fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil cacheName:nil];
NSError *error;
if (![self.fetchedResultsController performFetch:&error])
{
NSLog(@"Fetch failed: %@", error);
}
}
Quello che sto lottando con è:
- Come determinare il numero di righe per ogni sezione attraverso il modello di dati di base recuperando il numero di voci con il livello di addestramento 1 o 2 o 3.
- Come riempire le righe di ogni sezione recuperando gli elementi corretti.
- Come assegnare un titolo a ogni intestazione di sezione.
Sei praticamente lì. Basta controllare la documentazione di 'NSFetchedResultsController', in particolare il parametro' sectionNameKeyPath' del programma di inizializzazione designato, che si desidera impostare come proprietà 'trainingLevel'. – Rog
Si noti inoltre che il getter 'fetchedResultsController' dovrebbe eseguire il recupero, non' fetchWorkoutSet', altrimenti si avranno due chiamate diverse se è necessario assicurarsi che il set di allenamento sia stato recuperato e che sia necessario recuperare i risultati. – memmons