UILocalNotification показывает таймер обратного отсчета при запуске или просмотре загрузки

Я работаю над приложением, которое устанавливает UILocalNotification. Это первый раз, когда я использую его, и я хотел бы получить некоторые объяснения, чтобы использовать его эффективно и наилучшим образом. Каков лучший способ обратного отсчета до истечения срока действия уведомления? Я хотел бы показать пользователю UILabel с отсутствующим временем, этот UILabel обновляется каждую секунду, и когда я снова открываю свое приложение, он должен показывать таймер. Я сделал это следующим образом: когда я снова открываю свое приложение или вспоминаю представление, которое должно показывать таймер, я проверяю, есть ли UILocalNotification с пользовательской информацией, которую я установил ранее, затем я вычитаю его NSDate текущее время, поэтому Я понимаю разницу и обновляю UILabel. Я знаю, что это показывает время в секундах, но если эта процедура хороша, я переведу ее во время.

Есть ли лучший способ сделать это?

Вот мой код:

UILocalNotification *countDownNotificationSetted;

NSArray *scheduledNotificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications];

for (int i = 0; i<[scheduledNotificationArray count]; i++)

    if ([[[[scheduledNotificationArray objectAtIndex:i] userInfo] objectForKey:@"ID"] isEqualToString:@"ParkNotification"]) {

        countDownNotificationSetted = [scheduledNotificationArray objectAtIndex:i];
        break;
    }

NSDate *expringDate = [countDownNotificationSetted fireDate];

NSTimeInterval timeLeftToNotification = [expringDate timeIntervalSinceNow];

if(timeLeftToNotification == 0){

    [countDownTimer invalidate];
}

datePicker.countDownDuration = timeLeftToNotification;

_countDownLabel.text = [NSString stringWithFormat:@"%.0f", timeLeftToNotification];

NSLog(@"%.0f", timeLeftToNotification);

person Cers    schedule 08.07.2012    source источник


Ответы (1)


Я думаю, было бы лучше, если бы вы обновили свою метку с помощью таймера, как вы уже делаете, когда вы закрываете приложение, сохраняете это время локально в файле или в пользовательских настройках по умолчанию, а когда приложение снова запускается, считывайте время из этого файла. Или, если вы хотите, чтобы время прошло с момента первого открытия приложения, просто напишите время в appDidFinishLaunching и получайте его оттуда каждый раз. Я не вижу здесь преимущества локального уведомления.

Надеюсь это поможет. Ваше здоровье!

person George    schedule 08.07.2012
comment
Благодарить! Итак, я сохраняю в файле строку со временем запланированного уведомления, а затем вычитаю из нее текущее время, чтобы получить время отсутствия. Если бы я сохранил позицию пользователя, когда он получил уведомление, я мог бы преобразовать его в NSString, а затем сохранить в том же файле. Верно? - person Cers; 08.07.2012
comment
Это правильно. Это также проще сделать. Рад, что смог помочь. Ваше здоровье! - person George; 08.07.2012