Как я могу сделать дату, чтобы прыгать каждые n секунд? - PullRequest
0 голосов
/ 12 ноября 2011

Я хочу, чтобы дата менялась один день каждые "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 ]

1 голос
/ 12 ноября 2011

У меня есть 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?это IBOutlet, указывающий на UILabel?
И вы, вероятно, это подтвердили, но этот вызов возвращает правильную строку?


Вы не должны вызывать свой метод IBAction из своего таймерапо двум причинам:
1. Я действительно считаю, что это плохой дизайн, он вводит в заблуждение роль этого метода, поскольку он также вызывается из таймера.
2. Сигнатура метода не соответствует той, которая нужна NSTimer

aSelector: сообщение, которое нужно отправить цели, когда срабатывает таймер.Селектор должен иметь следующую подпись: - (void) timerFireMethod: (NSTimer *) theTimer

Этот текст взят из ссылки на класс NSTimer .

0 голосов
/ 12 ноября 2011

Заменить эту строку:

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

этой строкой:

NSDate *todayDate = [[NSDate date] dateByAddingTimeInterval:dayCount * 86400];
...