2009-07-03 16 views
7

Ho un NSFetchedResultsController che recupera oggetti da un NSManagedObjectContext. Sto usando i risultati per popolare UITableView.Impostazione di intestazioni UITableView da NSFetchedResultsController

Sto filtrando con questi due descrittori di ordinamento.

NSSortDescriptor *lastOpened = 
    [[NSSortDescriptor alloc] initWithKey:@"lastOpened" ascending:NO]; 

NSSortDescriptor *titleDescriptor = 
    [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES]; 

E quando creo il NSFetchedResultsController, ho ordinare le sezioni tramite sectionNameKeyPath:@"lastOpened".

In questo momento le mie sezioni visualizzano il formato standard come 2009-07-02 20:51:27 -0400 e dal momento che non possono essere aperte due allo stesso tempo, sono tutte uniche. Ho bisogno che coprano un intervallo di date/orari, ad esempio un'intera giornata, e siano in una forma leggibile. Qualcosa come Giovedì 2 luglio.

Grazie!


Edit:

Questo è tutto all'interno di un UITableViewController. Ecco un altro codice.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    // Display the dates as section headings. 
    return [[[fetchedResultsController sections] objectAtIndex:section] name]; 
} 



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section]; 
    return [sectionInfo numberOfObjects]; 
} 
+0

Si sta utilizzando i collegamenti per popolare la tabella o si è scritta un'origine dati per UITableView? –

+0

L'interrogante si sta sviluppando per l'iPhone, quindi non può essere Bindings, in quanto non esiste in Cocoa Touch. http://developer.apple.com/IPhone/library/documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/PortingfromCocoa/PortingfromCocoa.html –

+0

Dovresti filtrare i risultati impostando 'NSPredicates' sul tuo controller dei risultati recuperati, btw.È ancora possibile ordinare più di un modo, ma se si desidera mostrare solo determinati oggetti in cui determinate "proprietà sono vere" (ovvero un predicato è soddisfatto), utilizzare NSPredicates. – jbrennan

risposta

12

Ho finito per aggiungere una nuova proprietà day alla sottoclasse NSManagedObject per ottenere una stringa di data formattata.

@property (nonatomic, readonly) NSString * day; 
@property (nonatomic, retain) NSDateFormatter * dateFormatter 

Sythesize the dateFomatter. @synthesize dateFormatter;

Inizializzo il programma di formattazione della data in awakeFromFetch e awakeFromInsert.

self.dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[self.dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 

La funzione di accesso per day.

- (NSString *)day { 
    NSDate *date = self.startDate; 
    return [self.dateFormatter stringFromDate:date]; 
} 

Ho quindi impostare la mia sezione nome percorso chiave per guardare day; non dovrebbe essere necessario apportare modifiche ai descrittori di ordinamento.

0

non ho avuto la possibilità di scavare in quella zona del SDK ancora (il mio lavoro è con C#, quindi la roba iPhone è nel mio tempo per hobby), ma da quello che posso dirvi vorrebbe per usare l'altro init, in particolare initWithKey: ascendente: selector: e per il selettore si può passare un selettore al metodo di confronto che si confronta solo su Anno/Mese/Giorno, ignorando il tempo.

Ecco l'url di riferimento: iPhone Library Documentation

Spero che questo aiuti!

Problemi correlati