2011-02-27 13 views
15

Estoy tratando de obtener un objeto NSDate con la hora, minuto y segundo inicializados a 0. Estoy usando el siguiente código para obtenerlo, pero por alguna razón obtengo nada de [NSDateComponents date ] ¿Qué pasa con mi código?NSDateComponents return nil

NSCalendar *gregorian = [[[NSCalendar alloc] 
          initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 

NSDate *now = [[[NSDate alloc] init] autorelease]; 
NSDateComponents *nowDc = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) 
     fromDate:now]; 
// this returns nil! 
NSDate *todayStart = [nowDc date]; 

Respuesta

34

Cuando obtiene los componentes de una instancia de calendario, el calendario de la instancia NSDateComponents no está configurado.

Pero debe configurar el calendario antes de poder usar [components date], porque sin calendario no hay fecha.

Así que trate de añadir [nowDc setCalendar:gregorian];

+0

bien, ¿dónde dice que en los documentos? Qué implementación tan molesta. – Ovesh

+2

No dice eso explícitamente. Pero está implícito en toda la guía de programación de fechas. La distinción entre NSDate (como punto en el tiempo) y día mes año es bastante importante. Por la misma razón, no existe el método [NSDate dateWithYear: month: date]. Sin un mes y año NSCalendar no tienen sentido. –

+0

Muy útil, gracias! –

Cuestiones relacionadas