Запретить выполнение фоновой задачи dispatch_after ()

Это моя проблема. Когда мое приложение переходит в фоновый режим, я хочу, чтобы оно выполняло функцию через определенный промежуток времени. Вот что я делаю:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    isRunningInBackground = YES;

    taskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];

    int64_t delayInSeconds = 30;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
    {
        [self doSomething];
    });
}

- (void)doSomething
{
   NSLog(@"HELLO");
}

taskIdentifier переменная объявлена в файле myAppDelegate.h следующим образом:

UIBackgroundTaskIdentifier taskIdentifier;

Все работает как положено, я вижу, что консоль печатает ПРИВЕТ сразу после того, как прошло 30 секунд. Но я не хочуdoSomething выполняется, если приложение выходит на передний план до тех пор, пока не истечет 30 секунд. Поэтому мне нужно отменить это. Вот как я это делаю:

- (void)applicationWillEnterForeground:(UIApplication *)application
{    
    isRunningInBackground = NO;
    [self stopBackgroundExecution];
}

- (void)stopBackgroundExecution
{
    [[UIApplication sharedApplication] endBackgroundTask:taskIdentifier];
    taskIdentifier = UIBackgroundTaskInvalid;
}

Но, к сожалению, это не отменяетdoSomethingэто все еще выполняется. Что я делаю неправильно? Как я могу отменить эту функцию?

Ответы на вопрос(9)

Ваш ответ на вопрос