2013-04-25 3 views
0

Я хотел бы иметь ярлык в своем приложении, которое обновляется один раз в день в определенное время (т. Е. 12 утра). Если бы вы могли мне помочь, я бы очень признателен, спасибо.Как обновлять ярлык один раз в день?

Это то, что у меня есть сейчас, но оно работает только в том случае, если приложение открыто с 12 до 1 часа ночи.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"HH"]; 

NSString *stringDate = [formatter stringFromDate:[NSDate date]]; 

if ([stringDate isEqualToString:@"00"]) { 

NSLog(@"its working"); 


[self changeLabel]; 

} 

Чтобы уточнить, я пытаюсь изменить текст ярлыка один раз в день. Я хотел бы иметь обновление метки в определенное время, например, 12 часов, чтобы он обновлялся с началом каждого нового дня. Я пробовал несколько способов сделать это, но не получил желаемого результата. Если кто-нибудь знает, как это сделать, я буду благодарен за ваш вклад.

+0

Это для MacOS или iOS? –

+0

iOS, в частности iPhone/iPod Touch – Dave123

+2

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

ответ

-1

есть кто-то, у кого есть приложение, открытое форма более 24 часов ?? В любом случае, вы можете просто использовать NSTimer с 86400 в качестве времени задержки.

+0

его не то, что у них есть приложение, открытое на 24 часа. Приложение проверяет время на основе собственных часов устройства и затем обновляет таймер с каждым новым днем. Это не имеет никакого отношения к тому, как долго у пользователя открытое приложение – Dave123

+0

Я бы хотел избежать использования таймера с 86400, потому что он сбрасывается, если пользователь убивает приложение. – Dave123

+0

Недоразумение, чем. используйте NSUserDefaults и установите последние данные обновления. В начале вашего приложения проверьте это значение, сравните с текущим штампом времени и поиграйте с ним, как вам нравится –

-1

Когда вы запустите приложение, настройте таймер, который будет срабатывать в 12:00:01 AM, и обновите свою метку.

+0

Как установить таймер, который срабатывает в зависимости от времени суток? – Dave123

+0

NSTimer * time = [[NSTimer alloc] initWithFireDate: <# (NSDate *) #> interval: <# (NSTimeInterval) #> target: <#(id)#> Селектор: <#(SEL)#> userInfo: <#(id)#> повторений: <#(BOOL)#>]; –

+0

Параметр NSDate - это дата (со временем), которая вам нужна, интервал будет 86400, целевое самоселектор - метод, который вы хотите вызвать. в информации о пользователе поставьте ярлык для обновления и установите YES для повтора. –

1

Если вам нужно определить последний раз, когда приложение было открыто, вы можете использовать NSUserDefaults для сохранения даты, а затем проверить, что прошло соответствующее количество секунд (86400 = 1 день).

Что-то вдоль линий Далее следует указать вам в правильном направлении:

//gather last time app was opened 
    NSDate *lastUpdated = [[NSUserDefaults standardUserDefaults] objectForKey:@"app_last_updated"]; 

    //check date is valid 
    if(lastUpdated) 
    { 
     //determine number of seconds that have passed 
     NSTimeInterval timeInterval = [lastUpdated timeIntervalSinceNow]; 

     //check time interval is greater than 1 day 
     if(timeInterval > 86400) 
     { 
      //update label 
     } 
    } 

    //save current time 
    [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"app_last_updated"]; 
+0

Я не обязательно хочу проверить, когда приложение было в последний раз открыто. Я пытаюсь, чтобы приложение обновляло ярлык каждый день в определенное время (т. Е. 12 утра). – Dave123

+0

Вы можете определить это из кода, который я опубликовал, используя формат даты, чтобы проверить, соответствует ли дата после 12 часов. Если у вас нет приложения, работающего постоянно, то он не сможет обновить ярлык, не проверив при последнем открытии приложения. – CaptainRedmuff

0

Это зависит от того, что вы хотите сделать. В iOS, скорее всего, ваше приложение не работает на переднем плане все время. Поэтому я бы просто обновил ярлык, когда приложение активно в applicationDidBecomeActive:. Затем я создаю таймер, чтобы стрелять в конкретную дату/время, которое я хочу.

Например:

NSDate *d = // create the next date/time 
updateTimer_ = [[NSTimer alloc] initWithFireDate: d 
          interval: 0 
          target: self 
          selector:@selector(updateLabel:) 
          userInfo:nil repeats:NO]; 

NSRunLoop *runner = [NSRunLoop currentRunLoop]; 
[runner addTimer:updateTimer_ forMode: NSDefaultRunLoopMode]; 
+1

Не забудьте сделать недействительным таймер, когда приложение перейдет в фоновый режим. – sosborn

0

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

- (void)applicationDidBecomeActive:(UIApplication *)application { 

    NSLog(@"applicationDidBecomeActive"); 

    self.masterviewController = [[PBMasterViewController alloc] init]; 

    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 

    NSLog(@"Seconds --------> %.f",[[NSDate date] timeIntervalSinceDate:[[NSUserDefaults standardUserDefaults] objectForKey:@"OLD_DATE"]]); 
    NSLog(@"old date: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"OLD_DATE"]); 

    // 24 hours must elapse between each update check 
    if ([[NSDate date] timeIntervalSinceDate:[[NSUserDefaults standardUserDefaults] objectForKey:@"OLD_DATE"]] > 86400) { 

     NSLog(@"Time elapsed since last update is MORE than 1 day. Check for updates."); 
     [self.masterviewController checkForUpdates]; 

    } else { 

     NSLog(@"Time elapsed since last update is LESS than 1 day. Don't check for updates."); 

    } 

    // Here I convert the seconds into hours with two decimals, if you want to show the time elapsed in a UILabel 
    NSString *stringCheckInterval = [NSString stringWithFormat:@"%.02f hours since last update", [[NSDate date] timeIntervalSinceDate:[[NSUserDefaults standardUserDefaults] objectForKey:@"OLD_DATE"]]/60/60]; 
    NSLog(@"%@", stringCheckInterval); 


} 
Смежные вопросы