CoreData - Как установить дату и время независимо друг от друга? - PullRequest
2 голосов
/ 06 сентября 2010

У меня есть атрибут coredata с именем visitDate

Я хочу установить дату и время независимо друг от друга, используя отдельные средства выбора.


Я понимаю, что когда я устанавливаю время,Мне нужно получить текущую дату, месяц и год посещения, но установить только время с помощью NSDatePicker.

И наоборот, когда я устанавливаю дату, мне нужно получить текущий час, минуту и ​​секунду посещения.и только установить дату.

Я думаю, что я спрашиваю, как создать экземпляр NSDate, используя элементы select другого экземпляра NSDate?

Ответы [ 3 ]

1 голос
/ 06 сентября 2010

Может быть немного больше кода, чем необходимо, но это то, что я начал работать.

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

}
1 голос
/ 06 сентября 2010
0 голосов
/ 06 сентября 2010

Если вы используете UIDatePicker (вы упомянули NSDatePicker), вы можете установить UIDatePicker.datePickerMode и UIDatePicker.date.Если оба средства выбора будут отображаться на экране одновременно, вы можете скопировать дату на событие UIControlEventValueChanged.В противном случае может быть проще установить UIDatePicker.date при отображении средства выбора и скопировать его в visitDate при скрытии средства выбора.

...