2010-06-09 8 views
5

Tengo un comportamiento muy extraño en UIDatePicker. Tengo una vista con el selector de fecha declarado en el archivo .h como IBOutlet UIDatePicker * datePicker; con propiedad no atómica y retener. datePicker está correctamente vinculado en el archivo IB.El método de fecha de UIDatePicker es la fecha incorrecta: Dev de iPhone

En el código que yo pongo el mínimo, el máximo, la fecha y la acción inicial para pedir UICOntrolEventValueChanged usando siguiente código

If (!currentDate) { 
    initialDate = [NSDate date]; 
} else { 
    initialDate = currentdate; 
} 

[datePicker setMinimumDate:[NSDate date]]; 
[datePicker setMaximumDate:[[NSDate date] addTimeInterval:5 * 365.25 * 24 * 60 * 60]]; // to get upto 5 years 
[datePicker setDate:initialDate animated:YES]; 

[datePicker addTarget:self action:@selector(getDatePickerValue:) forControlEvents:UIControlEventValueChanged]; 

En getDatePickerValue, consigo la nueva fecha con datePicker.date.

Cuando la vista se cierra (usando un botón hecho), obtengo el valor actual de la fecha usando datePicker.date.

Ahora, si la vista se invoca sin 'currentDate', el selector devuelve 'fecha actual'. Esto es lo que sucede la 'primera' vez que se llama mi selector. Cada llamada posterior a la vista, sin una 'fecha actual' me da una fecha diferente y posterior a partir de hoy. Así,

primera vez que tengo la fecha de hoy decir 9 Jun 2010
segunda vez vuelve datePicker.date 10 Jun 2010
tercero 11 tiempo Jun 2010 y así sucesivamente. Aunque no siempre es incremental, pero en general sí lo es.

He puesto NSLogs y verificado que la fecha inicial está configurada correctamente.

El problema es solo en el dispositivo (en OS 3.0), el problema no se repite en el simulador.

No puedo encontrar lo que he hecho mal. Espero que alguien más se haya topado con un problema similar y pueda ayudarme a resolverlo.

+0

¿Ha intentado fijar CurrentDate a cero después de que ya no lo necesita? – iwasrobbed

+0

Estoy estableciendo currentDate en nil en viewdidUnload() y soltándolo en dealloc. Estoy usando el método de protocolo para pasar la nueva 'fecha actual' a la vista que llama. – prd

Respuesta

5

El problema finalmente se solucionó. Una lista de lo resuelve el problema para mí, así que si alguien se encuentra con problema similar se pueden probar estos pasos

hice dos cosas
1. establecer la configuración regional y el calendario del planificador de evento -

NSLocale *locale = [NSLocale currentLocale]; 
[dateFormatter setLocale:locale]; 

self.datePicker.locale = locale; 
self.datePicker.calendar = [locale objectForKey:NSLocaleCalendar]; 

Pero esta solo no resolvió el problema.
2. Puse 'self' antes de cada referencia a datePicker, es decir, reemplacé todo datePicker con self.datePicker. Esto debe haber forzado al compilador setters y getters a ser llamados.

No entiendo completamente por qué no usar 'self' hizo que se comportara de manera tan extraña. Pero sí, tendré más cuidado al usar los ajustadores correctos para mis variables.

Gracias por tomarse el tiempo para ver mi problema.

+0

Tenía el mismo problema y eso lo solucionó también. Gracias por compartir ! –

3
IBOUTLET UIDatePicker *datePicker; 
IBOUTLET UILabel *label; 
} 
-(void)click:(id)sender; 


- (void)viewDidLoad { 

    [super viewDidLoad]; 
    NSDate *dateFromPicker = [[NSDate alloc]init]; 
    [date setDate:dat animated:YES]; 
} 
-(void)click:(id)sender { 

    NSDate *selectDate = [datePicker date]; 
    NSString *dateString = [NSString stringWithFormat:@"%@",selectDate]; 

    [label setText:dateString]; 
} 

esto funcionará,

+3

Nombrar su "fecha" de UIDatePicker y su "dat" de NSDate hace que este código sea mucho más difícil de leer de lo que debería ser. – AndrewCr

Cuestiones relacionadas