0

我想让日期每隔“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];
}
4

2 回答 2

1

我有 3 个问题,并非都与您的问题直接相关。

  1. 为什么-(IBAction)jumpDate是 IBAction,如果您从代码中调用此方法,则应将其更改为(void),如果 IBAction 需要调用该方法,请从其他方法调用它,该方法将是该按钮的操作。

  2. userInfo在此调用之前,您的代码中是否缺少空格:
    timerDate=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(jumpDate)userInfo:nil repeats:YES];

  3. 您是否确认您的 IBOutlet 设置正确?我已经停止计算我忘记的次数了。


[gregDate setText : [NSString stringWithFormat:@" %@ ",tomorrow]];  

什么是 gregDate?它是指向 UILabel 的 IBOutlet 吗?
而且您可能已经验证了这一点,但是,调用 retunr 是一个有效的字符串?


你不应该从你的计时器调用你的IBAction方法,有两个原因,
1.我真的认为这是一个糟糕的设计,因为它也是从计时器调用的,所以它会混淆这个方法的作用。
2. 方法签名与 NSTimer 需要的不匹配

aSelector:定时器触发时发送给目标的消息。选择器必须具有以下签名: - (void)timerFireMethod:(NSTimer*)theTimer

此文本来自NSTimer类参考。

于 2011-11-12T06:00:33.897 回答
0

替换这一行:

NSDate *todayDate = [[NSDate alloc]init];

用这条线:

NSDate *todayDate = [[NSDate date] dateByAddingTimeInterval:dayCount * 86400];
于 2011-11-12T08:18:42.277 回答