2009-07-03 7 views
7

Tengo un NSFetchedResultsController que está obteniendo objetos de un NSManagedObjectContext. Estoy usando los resultados para poblar una UITableView.Configuración de encabezados UITableView desde NSFetchedResultsController

Estoy filtrando con estas dos descripciones de clasificación.

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

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

Y cuando creo el NSFetchedResultsController, puedo ordenar las secciones a través de sectionNameKeyPath:@"lastOpened".

Ahora mis secciones muestran el formato estándar como 2009-07-02 20:51:27 -0400 y como no se pueden abrir dos al mismo tiempo, todas son únicas. Necesito que cubran el rango de fecha/hora, como un día completo, y que estén en una forma legible por humanos. Algo así como Jueves, 2 de julio.

Gracias!


Editar:

Esto es todo dentro de un UITableViewController. Aquí hay un poco más de código.

- (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

¿Está utilizando enlaces para rellenar la tabla o ha escrito una fuente de datos para UITableView? –

+0

El interlocutor se está desarrollando para el iPhone, por lo que no puede ser Vinculaciones, ya que no existe en Cocoa Touch. http://developer.apple.com/IPhone/library/documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/PortingfromCocoa/PortingfromCocoa.html –

+0

Debería filtrar los resultados al establecer 'NSPredicates' en el controlador de resultados obtenidos, por cierto.Todavía puede ordenar más de una forma, pero si solo desea mostrar ciertos objetos donde ciertas "propiedades son verdaderas" (es decir, se cumple un predicado), entonces use NSPredicates. – jbrennan

Respuesta

12

Terminé agregando una nueva propiedad day a mi subclase NSManagedObject para obtener una cadena de fecha formateada.

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

Sythesize the dateFomatter. @synthesize dateFormatter;

Inicializo el formateador de fecha en awakeFromFetch y awakeFromInsert.

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

El descriptor de acceso para day.

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

luego volví mi nombre de sección ruta de acceso clave para mirar day; no debería necesitar hacer ningún cambio en sus descripciones de clasificación.

0

No he tenido la oportunidad de profundizar en esa zona del SDK todavía (mi trabajo es con C#, por lo que el material iPhone está en mi tiempo manía), pero por lo que puedo decir que querría para usar el otro init, específicamente initWithKey: ascendente: selector: y para el selector, podría pasar un selector a su método de comparación que solo se compararía en el año/mes/día, ignorando el tiempo.

Aquí está la URL de referencia: iPhone Library Documentation

Espero que esto ayude!

Cuestiones relacionadas