Метка обратного отсчета NSTimer - PullRequest
3 голосов
/ 28 июля 2011

Он будет продолжать отсчитывать и обновлять текущее время. У кого-нибудь есть идеи, как подойти к этой проблеме? Я не вижу, как NStimer распознает формат даты, как это: 20110803 23: 59: 59

Ответы [ 4 ]

3 голосов
/ 28 июля 2011

Посмотрите вверх NSDateFormatter. Вы можете указать строку формата (-[setDateFormat:]), которая позволяет преобразовывать в AND из NSDate и NSString.

При преобразовании обратно в представление обратного отсчета вы можете использовать NSDateComponents и NSCalendar, чтобы получить куски, необходимые для вашей метки обратного отсчета (вместо NSDateFormatter). Вы можете сделать что-то вроде:

NSDateComponents *countdown = [[NSCalendar currentCalendar] 
    components:(NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
      fromDate:[NSDate date] 
        toDate:expiration 
       options:0];

Это рассчитает все различия в единицах измерения для вас (относительно текущих настроек календаря устройства).

Компоненты можно вернуть с помощью вызова, например [countdown day] или [countdown hour].

0 голосов
/ 28 июля 2011

Я не углублялся в эту проблему глубоко, поэтому извините, если мой ответ немного неуместен.

В этом случае я бы использовал NSDate.Используя NSDateFormatter я бы преобразовал текстовые данные xml в NSDate.Изменение значения NSDate, когда каждый тик NSTimer, корректно.И немного кода, потому что символы NSDateFormatter иногда создают беспорядок:

    NSString *xmlDateFormat = @"yyyyMMdd HH:mm:ss";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:xmlDateFormat];
    NSDate *yourDate = [dateFormatter dateFromString:timeStringFromXml];

Это для чтения из xml.Для изменения значения NSDate при отметке вы можете увидеть документ NSDate.А для отображения значения в метке я бы арифметически вычислял каждое значение и показывал его с помощью случайного NSString:

   [NSString stringWithFormat:@"%dday %dh %dm %ds", days, hours, minutes, seconds];
0 голосов
/ 28 июля 2011

Вы можете преобразовать дату из NSString в NSDate, используя класс NSDateformatter.

NSString *dateString = @"20110803 23:59:59";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyyMMdd HH:mm:ss"];
NSDate *date = [dateFormat dateFromString:dateStr];  

Теперь, чтобы выполнить обратный отсчет, вы используете класс NSTimer для стрельбы каждую секунду, затем вы можете получить разницу в секундах между текущей датой и вашей date переменной, просто используя timeIntervalSinceDate.

NSTimeInterval distanceBetweenDates = [currentDate timeIntervalSinceDate:yourDate];

Теперь, когда у вас есть разница в секундах, вы конвертируете ее в любой формат, который хотите отобразить.

0 голосов
/ 28 июля 2011

Вы можете легко получить дату, используя NSDateFormatter, например, чтобы получить NSDate объект из вашей строки.

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyyMMdd' 'HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSDate *date = [dateFormatter dateFromString:your_date_string];
...