您好我正在尝试在特定日期执行某些操作,此时我只是记录了一些随机内容,但日志会在应用程序启动时直接显示,而不是在我设置的日期。这是我的代码。
-(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
调用此函数答案 0 :(得分:3)
嗯,你做了一些错误的假设:
首先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;
}
}
答案 1 :(得分:0)
if(nextDay.date){
NSLog(@"Doing the stuff on the date");
}
总是如此。
您需要将当前日期与您从选择器或任何地方选择的日期进行比较。您需要将未来日期保存在userdefaults或plist等中。在theMagicDate方法中读取它并比较两个日期,然后进入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");
}
}