Таймер: как оставить таймер активным в фоновом режиме - PullRequest
3 голосов
/ 23 декабря 2011

В моем приложении iPhone Timer,

В котором таймер должен работать в фоновом режиме.

Итак, Я установил уведомление в appdelegate, он работает отлично ... С этим я вызываю методы из контроллера представления, который делает таймер живым.

Посмотрите код ...

Делегат приложения

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    /*
     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
     */

    NSLog(@"Time Remaining %d",(self.viewController.totalSeconds-self.viewController.totalCount));
    [self.viewController selectandnotify:(self.viewController.totalSeconds-self.viewController.totalCount)];
    [self.viewController stopTimer];
    [self.viewController startTimerAction];

}

Здесь я вызываю метод startTimerAction метод, который находится в моем контроллере представления ... взгляните на это ...

-(void)startTimerAction
{
 timer_main = [NSTimer scheduledTimerWithTimeInterval:(1.0) target:self    selector:@selector(ShowActicity) userInfo:nil repeats:YES];
}

Что такое NSTimer

Здесь каждый раз

- Метод ShowActivity будет вызываться через каждую секунду ... Что находится ниже в моем контроллере представления ...

-(void)ShowActicity
{

    NSLog(@"Total Counts %d",totalCount);
    if (totalCount == totalSeconds) {
        if ([timer_main isValid]) {
            [timer_main invalidate];
            isTimeOver = YES;
            [self generateLog];
        }
    } else {
        totalCount++;

        seconds =seconds + 1;
        if(seconds > 59)
        {
            minutes = minutes + 1;
            seconds= 0;
        }

}

Как каждый раз вызывать этот метод из контроллера вида .....

  • Как я могу каждый раз вызывать метод showActivity из appdelegate ...

    • Должен ли я использовать делегат для этого

    • Должен ли я создать showActivity и таймер в моем Appdelegate ..

  • На самом деле я хочу, чтобы это приложение запускалось, когда представление переключается в приложении .....

Я думаю, если я сделаю делегата, это хороший вариант?

Любой другой способ .... пожалуйста, есть предложения

1 Ответ

4 голосов
/ 23 декабря 2011

Обычно этот код используется для фонового запуска. В фоновом таймере не работает

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIApplication*    app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];

    // Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // Do the work associated with the task.
        [self startTimerAction];
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    });
}

http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...