2010-09-06 9 views
2

J'ai un attribut de coredata appelé visitDateCoreData - Comment régler la date et l'heure indépendamment l'une de l'autre?

Je veux régler la date et l'heure indépendamment l'une de l'autre en utilisant des sélecteurs séparés.


Je me rends compte que quand je mets le temps, je dois saisir la date actuelle, le mois et l'année de visitDate, mais seulement régler l'heure de la NSDatePicker. Inversement, lorsque je définis la date, je dois saisir l'heure, la minute et la date de visitDate existantes, et ne régler que la date.

Je suppose que ce que je demande est comment créer une instance NSDate en utilisant des éléments select d'une autre instance NSDate?

Répondre

1

Peut-être un peu plus de code que nécessaire, mais c'est ce que j'ai travaillé.

if (editing == Date) { 

    if ([visit valueForKey:@"visitDate"] == nil) { 
     [visit setValue:datePicker.date forKey:@"visitDate"]; 
    } 
    else { 
     NSDateFormatter *hourFormat = [[NSDateFormatter alloc] init]; 
     [hourFormat setDateFormat:@"HH"]; 
     NSString *hourString = [hourFormat stringFromDate:[visit valueForKey:@"visitDate"]]; 

     NSDateFormatter *minuteFormat = [[NSDateFormatter alloc] init]; 
     [minuteFormat setDateFormat:@"mm"]; 
     NSString *minuteString = [minuteFormat stringFromDate:[visit valueForKey:@"visitDate"]]; 

     NSDateFormatter *dayFormat = [[NSDateFormatter alloc] init]; 
     [dayFormat setDateFormat:@"dd"]; 
     NSString *dayString = [dayFormat stringFromDate:datePicker.date]; 

     NSDateFormatter *monthFormat = [[NSDateFormatter alloc] init]; 
     [monthFormat setDateFormat:@"MM"]; 
     NSString *monthString = [monthFormat stringFromDate:datePicker.date]; 

     NSDateFormatter *yearFormat = [[NSDateFormatter alloc] init]; 
     [yearFormat setDateFormat:@"YYYY"]; 
     NSString *yearString = [yearFormat stringFromDate:datePicker.date]; 

     NSDateComponents *components = [[NSDateComponents alloc] init]; 
     [components setMinute:[minuteString intValue]]; 
     [components setHour:[hourString intValue]]; 
     [components setDay:[dayString intValue]]; //Set Day 
     [components setMonth:[monthString intValue]]; //Set Month 
     [components setYear:[yearString intValue]]; //Set Year 
     NSCalendar *gregorian = [[NSCalendar alloc] 
           initWithCalendarIdentifier:NSGregorianCalendar]; 
     NSDate *date = [gregorian dateFromComponents:components]; 

     [visit setValue:date forKey:@"visitDate"]; 
    } 
    [visitTableView reloadData]; 
    NSLog(@"Date Saved as %@", visit.visitDate); 

} 
else if (editing == Time) { 

    if ([visit valueForKey:@"visitDate"] == nil) { 
     [visit setValue:datePicker.date forKey:@"visitDate"]; 
    } 
    else { 
     NSDateFormatter *hourFormat = [[NSDateFormatter alloc] init]; 
     [hourFormat setDateFormat:@"HH"]; 
     NSString *hourString = [hourFormat stringFromDate:datePicker.date]; 

     NSDateFormatter *minuteFormat = [[NSDateFormatter alloc] init]; 
     [minuteFormat setDateFormat:@"mm"]; 
     NSString *minuteString = [minuteFormat stringFromDate:datePicker.date]; 

     NSDateFormatter *dayFormat = [[NSDateFormatter alloc] init]; 
     [dayFormat setDateFormat:@"dd"]; 
     NSString *dayString = [dayFormat stringFromDate:[visit valueForKey:@"visitDate"]]; 

     NSDateFormatter *monthFormat = [[NSDateFormatter alloc] init]; 
     [monthFormat setDateFormat:@"MM"]; 
     NSString *monthString = [monthFormat stringFromDate:[visit valueForKey:@"visitDate"]]; 

     NSDateFormatter *yearFormat = [[NSDateFormatter alloc] init]; 
     [yearFormat setDateFormat:@"YYYY"]; 
     NSString *yearString = [yearFormat stringFromDate:[visit valueForKey:@"visitDate"]]; 

     NSDateComponents *components = [[NSDateComponents alloc] init]; 

     [components setMinute:[minuteString intValue]]; 
     [components setHour:[hourString intValue]]; 
     [components setDay:[dayString intValue]]; //Set Day 
     [components setMonth:[monthString intValue]]; //Set Month 
     [components setYear:[yearString intValue]]; //Set Year 
     NSCalendar *gregorian = [[NSCalendar alloc] 
           initWithCalendarIdentifier:NSGregorianCalendar]; 
     NSDate *date = [gregorian dateFromComponents:components]; 

     [visit setValue:date forKey:@"visitDate"]; 
    } 
    [visitTableView reloadData]; 
    NSLog(@"Date Saved as %@", visit.visitDate); 

} 
0

Si vous utilisez UIDatePicker (vous avez mentionné NSDatePicker), vous pouvez définir UIDatePicker.datePickerMode et UIDatePicker.date. Si les deux sélecteurs sont à l'écran en même temps, vous pouvez copier la date sur un événement UIControlEventValueChanged. Si ce n'est pas le cas, il peut être plus simple de définir UIDatePicker.date lorsque vous affichez le sélecteur et de le copier dans visitDate lorsque vous masquez le sélecteur.