我想让日期每隔“n”秒改变一天,就像时间机器一样。我有这个代码但没有任何反应,任何帮助将不胜感激。 这是代码:没有问题,没有错误......没有明天约会!
-(IBAction)jumpDate
{
NSDateFormatter *dateFormater = [[NSDateFormatter alloc]init];
[dateFormater setDateFormat:@"dd MMMM yyyy h:mm:ss"]; //dateFormater.dateStyle =NSDateFormatterLongStyle; //USA date style MMMM-dd-yyyy
[dateFormater setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CDT"]];
NSDate *todayDate = [[NSDate alloc]init];
[gregDate setText : [dateFormater stringFromDate:todayDate]];
[NSString stringWithFormat:@"dd MMMM yyyy", dayCount];
dayCount++;
if (dayCount >= 365)
{
dayCount = 365;
[timerDate invalidate];
}
}
//and the timer
- (void)viewDidLoad
{
NSDateFormatter *dateFormater = [[[NSDateFormatter alloc]init]autorelease];
[dateFormater setDateFormat:@"dd MMMM yyyy"];
NSTimeInterval secondsPerDay = 86400 ; // = 24 * 60 * 60
NSDate *today = [[[NSDate alloc]init]autorelease];
NSDate *tomorrow;
tomorrow = [today dateByAddingTimeInterval:(NSTimeInterval)secondsPerDay];
[gregDate setText : [NSString stringWithFormat:@" %@ ",tomorrow]];
dayCount = 1;
timerDate=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(jumpDate)userInfo:nil repeats:YES];
[super viewDidLoad];
}
答案 0 :(得分:1)
我有3个问题,并非与您的问题直接相关。
为什么-(IBAction)jumpDate
是IBAction,如果您从代码中调用此方法,则应将其更改为(void)
,如果IBAction需要调用它,请从其他方法调用它这将是该按钮的动作。
此次通话中userInfo
之前的代码中是否缺少空格:
timerDate=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(jumpDate)userInfo:nil repeats:YES];
您是否确认您的IBOutlet设置正确?我已经停止计算我忘记的时间了。
[gregDate setText : [NSString stringWithFormat:@" %@ ",tomorrow]];
什么是gregDate?它是指向UILabel的IBOutlet吗? 你可能已经验证了这一点,但是,该调用重新调用了一个有效的字符串?
出于两个原因,您不应该通过计时器调用IBAction
方法,
1.我真的认为这是糟糕的设计,它会引起对这种方法作用的混淆,因为它也是来自计时器的调用。
2.方法签名与NSTimer需要的签名不匹配
aSelector: 定时器触发时发送到目标的消息。选择器必须具有以下签名: - (void)timerFireMethod:(NSTimer *)theTimer
此文本来自NSTimer类引用。
答案 1 :(得分:0)
替换此行:
NSDate *todayDate = [[NSDate alloc]init];
这一行:
NSDate *todayDate = [[NSDate date] dateByAddingTimeInterval:dayCount * 86400];