如何让每隔n秒跳一个日期?

时间:2011-11-12 05:39:50

标签: objective-c ios nsdate nstimeinterval

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

2 个答案:

答案 0 :(得分: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设置正确?我已经停止计算我忘记的时间了。


  4. [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];