Ежедневно обновляйте метку новым текстом

У меня есть ярлык, который я хочу обновлять ежедневно и автоматически? в какое-то конкретное время. Как мог быть код.. Я искал везде о том, как ежедневно обновлять этикетку.

метки NSdate и NStimer работают. А также средство выбора даты, если пользователь хочет просмотреть события вперед.

Я думаю, что это что-то вроде "если" дата... }else{... и что-то в этом роде

Спасибо

редактировать:

Если у меня уже есть эти коды в моем приложении, тогда что-то не так

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];


NSDate *nowDate = [NSDate date];

self.currentDateLabel.text = [dateFormatter stringFromDate:nowDate];

person user2310932    schedule 27.06.2013    source источник
comment
Эй, вы не должны публиковать повторяющиеся вопросы. Вы отправили этот же вопрос yday нет? Лучшей практикой является отредактировать тот же вопрос в хорошей форме.   -  person prince    schedule 27.06.2013
comment
Я отредактировал его, но он «отложен», так что, думаю, никто его не видел. Извиняюсь   -  person user2310932    schedule 27.06.2013


Ответы (1)


Попробуйте этот код для любого сравнения между датами... Вы не должны сравнивать дату в виде строки. Сравните даты до преобразования в строку. Преобразуйте self.serverDate в формат даты, используя функцию dateFromString средства форматирования, указав точный формат даты, такой как у dateString. Затем сравните даты, используя следующую функцию.

-(void) callAfterSixtySecond:(NSTimer*) t 
{

NSDate *today = [NSDate date]; // current date
NSDate *newDate = self.serverDate; // other date 

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"HH:mm"];
NSDate *todayTime = [formatter dateFromString:[formatter stringFromDate:today]];
NSDate *requiredTime = [formatter dateFromString:[formatter stringFromDate:newDate]];

NSComparisonResult result; 

result = [todayTime compare:requiredTime ]; // comparing two dates

if(result == NSOrderedAscending)
    NSLog(@"today is less");
else if(result == NSOrderedDescending)
    NSLog(@"newDate is less");
else if(result == NSOrderedSame)
    NSLog(@"Both dates are same");  // time has reached. Update Label using setText method of label
else
    NSLog(@"Date cannot be compared");
}

Вам нужно будет запускать этот метод каждую минуту, используя NSTimer...

NSTimer* myTimer = [NSTimer scheduledTimerWithTimeInterval: 60.0 target: self
                                   selector: @selector(callAfterSixtySecond:) userInfo: nil repeats: YES];
person prince    schedule 27.06.2013
comment
да, будет... Попробуйте изменить время вашего устройства и проверьте. Также убедитесь, что фиксированная дата, с которой вы хотите сравнить, имеет формат ЧЧ:мм, т.е. 24-часовой формат. В противном случае вам нужно будет соответствовать формату соответственно. - person prince; 27.06.2013
comment
настройка локали допустима, если ваше приложение работает в разных часовых поясах. Но формат времени может быть проблемой. Менять этикетку нужно каждый день в определенное время. Но ваш формат имеет только дату, месяц и день. Нет информации о времени. Вам нужна по крайней мере информация о часе, т.е. чч или чч в формате для сравнения времени. Поэтому все, что вам нужно сделать, это заменить термины в моем ответе именами функций и параметров в вашей функции. - person prince; 27.06.2013
comment
За исключением части сравнения, ваш код выглядит более или менее так же, как мой. Поэтому, когда результатом является NSOderedSame, вы обновляете текстовую метку. - person prince; 27.06.2013
comment
В своем таймере запланируйте таймер с временным интервалом 60 (в секундах), чтобы проверять каждую минуту. Также вы просто устанавливаете текущее время для метки, не сравнивая ни с чем. Вы должны заказать каждый метод по-разному, чтобы мы могли различать методы. - person prince; 27.06.2013