2010-06-09 4 views
5

Ich bekomme sehr seltsames Verhalten auf UIDatePicker. Ich habe eine Ansicht mit Datumsauswahl deklariert in .h Datei als IBOutlet UIDatePicker * datePicker; mit nichtatomischer Eigenschaft und behalten. datePicker ist in der IB-Datei korrekt verknüpft. folgenden CodeUIDatePicker date Methode wählt falsches Datum: iPhone Dev

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

In getDatePickerValue

Im Code mir das Minimum, Maximum am Einstellung Anfangsdatum und Aktion für UICOntrolEventValueChanged mit aufzurufen, erhalte ich das neue Datum mit datePicker.date.

Wenn die Ansicht geschlossen ist (mit einem Fertig-Button), bekomme ich den aktuellen Wert des Datums mit datePicker.date.

Wenn die Ansicht jetzt ohne 'currentDate' aufgerufen wird, gibt die Auswahl das 'heutige Datum' zurück. Dies ist der Zeitpunkt, zu dem meine PickerView aufgerufen wird. Jeder nachfolgende Aufruf der Ansicht ohne 'aktuelles Datum' gibt mir ein anderes und späteres Datum von heute. So

erste Mal, dass ich das heutige Datum bekommen sagen 9. Juni 2010
zweiten Mal datePicker.date zurück 10. Juni 2010
dritten Mal 11. Juni 2010 und so weiter. Obwohl es nicht immer inkrementell, aber meistens ist es.

Ich habe NSLogs, und verifiziert das Anfangsdatum ist richtig eingestellt.

Das Problem ist nur auf dem Gerät (unter OS 3.0), das Problem wird nicht im Simulator repliziert.

Ich kann nicht finden, was ich falsch gemacht habe. Ich hoffe, dass jemand anderes auf ähnliche Probleme gestoßen ist und mir helfen kann, dies zu lösen.

+0

Haben Sie Current auf Null versucht Einstellung, nachdem Sie nicht mehr benötigen? – iwasrobbed

+0

Ich setze currentDate auf nil in viewdidUnload() und lasse es in dealloc los. Ich benutze die Protokollmethode, um das neue 'currentdate' zurück an die aufrufende Ansicht zu übergeben. – prd

Antwort

5

Das Problem ist endlich gelöst. Listing, was das Problem für mich gelöst, so dass, wenn jemand anderes ähnliches Problem begegnet können sie diese Schritte

Ich habe zwei Dinge
1. Stellen Sie die locale und Kalender des picker versuchen -

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

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

Aber diese allein hat das Problem nicht gelöst.
2. Ich legte 'selbst' vor jedem Verweis auf datePicker, d. H. Ersetzte alle datePicker mit self.datePicker. Dies muss den Aufruf der Compiler-Setter und Getter erzwungen haben.

Ich verstehe nicht voll und ganz, warum es nicht so seltsam ist, wenn man 'selbst' benutzt. Aber ja, ich werde vorsichtiger sein, wenn ich die richtigen Setter für meine Variablen verwende.

Vielen Dank, dass Sie sich die Zeit genommen haben, mein Problem zu betrachten.

+0

Hatte das gleiche Problem und das reparierte es auch für mich. Danke für das Teilen ! –

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

dies funktionieren wird,

+3

Wenn Sie Ihr UIDatePicker "date" und Ihr NSDate "dat" benennen, ist dieser Code viel schwerer zu lesen als er sein sollte. – AndrewCr