2013-03-26 2 views
-1

안녕하세요, 저는 특정 날짜에 뭔가를하려고합니다. 인스턴트 메신저 그냥 임의의 물건을 로깅하지만 로그가 응용 프로그램이 시작될 때 바로 나타나고 날짜가 아닙니다. 설정했다. 여기 내 코드가있다.Xcode : 특정 날짜에 무언가를 수행

-(void)theMagicDate{ 

    NSCalendar *nextCal = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *nextComp = [nextCal components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]]; 

    [nextComp setYear:2013]; 
    [nextComp setMonth:3]; 
    [nextComp setDay:26]; 
    [nextComp setHour:10]; 
    [nextComp setMinute:05]; 

    UIDatePicker *nextDay = [[UIDatePicker alloc]init]; 
    [nextDay setDate:[nextCal dateFromComponents:nextComp]]; 

    if(nextDay.date){ 
     NSLog(@"Doing the stuff on the date"); 
    } 
} 

과 내가있는 viewDidLoad

에서이 함수를 호출

답변

3

그럼 당신이 만드는 몇 가지 잘못된 가정으로 이동, userdefaults에서 미래의 날짜를 저장하거나 PLIST 등 theMagicDate 방법으로 그것을 읽고 두 날짜를 비교해야합니다

먼저 if(nextDay.date){ 것 항상 사실입니다. 부동산 날짜에 할당 된 것이 있는지 여부 만 확인하기 때문에. 이 속성에 날짜를 지정 했으므로 사실입니다.

두 번째로 UIDatePicker은 사용자가 날짜를 선택할 수있는 UI (사용자 인터페이스) 구성 요소입니다. 구성 요소를 사용하여 만든 날짜를 붙여 넣었는지 확인하려면 지금 또는 미래에 NSDate에 대한 방법을 사용해야합니다. 그래서 같이

: 좋은 답변

-(void)theMagicDate{ 

NSCalendar *nextCal = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *nextComp = [nextCal components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]]; 

[nextComp setYear:2013]; 
[nextComp setMonth:3]; 
[nextComp setDay:26]; 
[nextComp setHour:10]; 
[nextComp setMinute:05]; 

NSDate *dateToCheck = [nextCal dateFromComponents:nextComp]; 
NSDate *now = [NSDate date]; 


switch ([now compare:dateToCheck]) { 
    case NSOrderedAscending: 
     NSLog(@"Date in the future"); 
     break; 

    case NSOrderedDescending: 
     NSLog(@"Date in the past"); 
     break; 

    case NSOrderedSame: 
     NSLog(@"Date is now"); 
     break; 
} 


} 
+0

나는이 방법을 시도하지만, 현재 날짜와 시간을 앞으로 1 분으로 설정하려고해도 @ "미래의 날짜"문자열 만 가져 오지만 그 날짜가 언제인지는 알 수 없습니다. 통과했다. – Mikzstone

+0

미래의 날짜를 확인하기 직전에 미래의 날짜를 1 분으로 설정 한 경우. 위의 예를 실행하면 다음과 같은 콘솔 로그가 표시됩니다. '과거의 날짜' – rckoenes

+0

알았어, 작동하도록되어 있지만 전화를 다시 시작할 때만 가능합니다. 무슨 일이 벌어 질지는이 견해가 활발히 움직여야하고 여전히 특정 날짜와 시간에 일어날 일들을 시작해야한다는 것입니다. – Mikzstone

0
if(nextDay.date){ 
    NSLog(@"Doing the stuff on the date"); 
} 

는 항상 참입니다.

현재 날짜를 선택기 또는 다른 곳에서 선택한 날짜와 비교해야합니다. 그런 다음 NSLog(@"Doing the stuff on the date");

-(void)theMagicDate{ 

    NSCalendar *nextCal = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *nextComp = [nextCal components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]]; 

    [nextComp setYear:2013]; 
    [nextComp setMonth:3]; 
    [nextComp setDay:26]; 
    [nextComp setHour:10]; 
    [nextComp setMinute:05]; 

    UIDatePicker *nextDay = [[UIDatePicker alloc]init]; 
    [nextDay setDate:[nextCal dateFromComponents:nextComp]]; 


    //read from plist etc 
    NSDate *readDate=... 


    if([readDate compare:nextDay.date]==NSOrderedSame){ 
     NSLog(@"Doing the stuff on the date"); 
    } 
} 
+0

+1. – Girish

관련 문제