2013-04-18 5 views
2

다음 코드를 실행하는 UIToolbarButton에 IBAction 메서드를 연결했습니다.UIDatePicker 및 날짜가 올바르게 저장되지 않습니다.

UIDatePicker는 사용자에게 시간을 표시하기 위해서만 설정됩니다. 따라서 피커가 임의로 날짜를 선택합니다. 날짜가 오늘이거나 날짜가 내일 인 경우도 있습니다. 선택자가 항상 선택한 시간을 선택하기를 원합니다 (그러나 항상 미래에). 예 : 사용자가 1 월 1 일 오후 10시에 오전 6시를 선택하면 1 월 2 일 오전 6시를 저장할 날짜가 필요합니다.

그렇다면 다음과 같이하면 NSLog가 하나의 응답을 반환하고 50 %는 다른 응답을 반환하는 시간의 50 %입니다.

if (self.picker.date >= [NSDate dateWithTimeIntervalSinceNow:0]) { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSDate *pickerdate = self.picker.date; 
    [defaults setObject:pickerdate forKey:@"pickerdate"]; 
    [defaults synchronize]; 
    NSLog(@"The date is more than now. Pickerdate is %@",pickerdate); 
} 
else { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSCalendar*  calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; 
    NSDateComponents* components = [[NSDateComponents alloc] init]; 
    components.day = 1; 
    NSDate * pickerdate = [calendar dateByAddingComponents: components toDate: self.picker.date options: 0]; 
    [defaults setObject:pickerdate forKey:@"pickerdate"]; 
    [defaults synchronize]; 
    NSLog(@"The date is less than now. Pickerdate is %@",pickerdate); 
} 

EDIT : 코드가 수정되었습니다. 논리가 거꾸로되었지만 문제가 남아 있습니다.

+1

'> ='(또는 비슷한) 연산자를 사용하여 두 개의 'NSDate'객체를 비교할 수 없습니다. 이들은 객체입니다. 'compare :'메소드를 사용하여 두 날짜를 비교해야합니다. 하나의 객체 포인터가 다른 객체 포인터보다 크거나 동일한 지 비교하려고합니다. 확실히 당신이 원하는 것이 아닙니다. – rmaddy

+0

아, 말이 되네. NSDate 객체 비교를 잊어 버렸습니다. 다른 사람보다 더 큰 사람이 있다면 어떻게 찾을 수 있습니까? – Macness

+0

isLaterThanOrEqualTo 및 isEarlierThanOrEqualTo에 대한 Saw 클래스 참조입니다. – Macness

답변

1

두 개의 NSDate 개체를 비교하기 위해 >= (또는 비슷한) 연산자를 사용할 수 없습니다. 이들은 객체입니다. 두 날짜를 비교하려면 compare: 메서드를 사용해야합니다. 하나의 객체 포인터가 다른 객체 포인터보다 크거나 동일한 지 비교하려고합니다. 확실히 당신이 원하는 것이 아닙니다.

적절한 대체 될 것이다 : [NSDate date][NSDate dateWithTimeIntervalSinceNow:0]가 동일한 결과를 제공

if ([self.picker.date compare:[NSDate date]] != NSOrderAscending) { 

참고있다.

관련 문제