2010-06-09 5 views
5

Je reçois un comportement très étrange sur UIDatePicker. J'ai une vue avec le sélecteur de date déclaré dans le fichier .h comme IBOutlet UIDatePicker * datePicker; avec propriété non atomique et conserver. datePicker est correctement lié dans le fichier IB.UIDatePicker méthode de date est de choisir une date erronée: iPhone Dev

Dans le code, je suis en train minimum, maximum, date initiale et de l'action à appeler à l'aide du code ci-dessous UICOntrolEventValueChanged

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, je reçois la nouvelle date à l'aide datePicker.date.

Lorsque la vue est fermée (en utilisant un bouton terminé), j'obtiens la valeur actuelle de la date en utilisant datePicker.date.

Maintenant, si la vue est appelée sans 'date_actuelle', le sélecteur renvoie 'date d'aujourd'hui'. C'est ce qui arrive la première fois que mon pickerView est appelé. Chaque appel ultérieur à la vue, sans "date actuelle" me donne une date différente et plus tard à partir d'aujourd'hui. Ainsi,

première fois que je reçois la date d'aujourd'hui dire 9 juin 2010
deuxième fois datePicker.date retourne 10 juin 2010
troisième fois le 11 juin 2010 et ainsi de suite. Bien que ce ne soit pas toujours incrémental, mais surtout c'est.

J'ai mis NSLogs, et vérifié la date initiale est réglée correctement.

Le problème est uniquement sur le périphérique (sur OS 3.0), le problème n'est pas répliqué sur le simulateur.

Je ne trouve pas ce que j'ai fait de mal. J'espère que quelqu'un d'autre a rencontré un problème similaire et peut m'aider à résoudre ce problème.

+0

Avez-vous essayé d'installer currentdate à zéro après que vous ne avez plus besoin? – iwasrobbed

+0

Je mets currentDate à zéro dans viewdidUnload() et le libère dans dealloc. J'utilise la méthode de protocole pour passer le nouveau 'currentdate' à la vue d'appel. – prd

Répondre

5

Le problème est finalement résolu. Liste ce qui a résolu le problème pour moi, donc si quelqu'un d'autre rencontre problème similaire, ils peuvent essayer ces étapes

J'ai fait deux choses
1. définir les paramètres régionaux et le calendrier de la Datepicker -

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

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

Mais cette seul n'a pas résolu le problème.
2. Je mets 'self' avant chaque référence à datePicker c'est-à-dire remplacé tous les datePicker par self.datePicker. Cela a dû forcer les setters et getters du compilateur à être appelés.

Je ne comprends pas complètement pourquoi le fait de ne pas utiliser le 'soi' l'a amené à se comporter de façon si étrange. Mais oui, je serai plus prudent avec l'utilisation des setters corrects pour mes variables.

Merci d'avoir pris le temps de regarder mon problème.

+0

Avait le même problème et cela l'a fixé pour moi aussi. Merci d'avoir partagé ! –

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]; 
} 

cela fonctionnera,

+3

Nommer votre "date" UIDatePicker et votre "dat" NSDate rend ce code beaucoup plus difficile à lire qu'il devrait être. – AndrewCr

Questions connexes