Sto scrivendo una piccola app per iPhone per la mia azienda che mostra le prenotazioni per ogni dipendente una settimana alla volta. Utilizzo i dati principali per ottenere un elenco di "Prenotazioni" per una determinata settimana e desidero visualizzarli in un UITableView suddiviso in una sezione al giorno della settimana.Aggiunta di ulteriori sezioni a un NSFetchedResultsController
Il problema è che ho bisogno di mostrare 7 sezioni per ogni giorno della settimana (mostrando una cella 'No Bookings' dove una sezione/data non ha prenotazioni).
io ho uno screenshot dell'app così com'è here (purtroppo non pubblicare immagini ancora come io sono nuovo a StackOverlow)
Al momento sto raggiungimento di questo utilizzando un 'fetchResults 'il metodo che ottiene i prenotazioni e li organizza in un array di possibili date:
- (void)refetchResults {
// Drop bookings Array, replacing with new empty one
// 7 slots for 7 days each holding mutable array to recieve bookings where appropraite
self.bookings = [NSArray arrayWithObjects:[NSMutableArray array],
[NSMutableArray array], [NSMutableArray array],
[NSMutableArray array], [NSMutableArray array],
[NSMutableArray array], [NSMutableArray array], nil];
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Booking" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Limit to this weeks data
[fetchRequest setPredicate:
[NSPredicate predicateWithFormat:@"(date >= %@) && (date <= %@) && (resource == %@)",
firstDate,lastDate,resourceId]];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"recId" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, sortDescriptor2, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Fetch records in to array
NSError *error;
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (results == nil) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[fetchRequest release];
[sortDescriptor release];
[sortDescriptor2 release];
[sortDescriptors release];
// Walk through records and place in bookings Array as required
for (Booking *item in results) {
// Decide on array index by difference in firstDate and booking date
int idx = (int)[[item date] timeIntervalSinceDate:firstDate]/86400;
// Add the item to the approp MutArray
[(NSMutableArray *)[bookings objectAtIndex:idx] addObject:item];
}
// Reload table
[tableView reloadData];
}
la mia domanda è: esiste un modo per ottenere lo stesso risultato utilizzando NSFetchedResultsController? In qualche modo avrei bisogno di ottenere il NSFetchedResultsController per avere 7 sezioni, una per ogni giorno della settimana, alcune delle quali potrebbero non avere prenotazioni.
Qualsiasi aiuto molto apprezzato :)
Grazie per la risposta. A meno che manchi qualcosa, dovrei comunque fare un esercizio di mappatura per trovare la sezione appropriata, ovvero: tableView richiede la sezione da 0 a 6 (che rappresenta, ad esempio, dal 1 novembre al 7 novembre), ma il NSFetchedResultsController potrebbe avere solo sezioni 0, 1 e 2 (che rappresentano, forse, le prenotazioni per il 2 novembre, 3 novembre e 6 novembre). Potrei fare questo mapping ogni volta che ho bisogno di fare riferimento alle Bookings o potrei memorizzare la mappatura quando costruisco il NSFetchedResultsController ma spero che ci sia un modo più bello/più ordinato per farlo. – Paul80nd
Hai ragione. Mi dispiace non essere di maggiore aiuto. Lo sperimenterò più tardi, me stesso, come il tempo consente. Curioso di sapere se/come lo risolvi. – westsider
In realtà, riflettendo un po 'su questo penso che una soluzione utilizzabile al momento è quella di creare un NSFetchedResultsController come al solito, ma alla fine di questo impostare i campi di una matrice' mapping 'per tradurre le sezioni di tableview nelle sezioni di NSFetchedResultsController. Questo dovrebbe significare che posso ottenere le notifiche dell'oggetto dal resultsController (che è bello;) - Devo solo aggiornare l'array 'mapping' quando le notifiche arrivano per gli elementi aggiunti/rimossi dal resultsController. In ogni caso, se trovo una soluzione migliore, la scriverò qui. – Paul80nd