Zapobiegaj wykonaniu zadania tła dispatch_after ()

To jest mój problem. Gdy moja aplikacja wejdzie w tło, chcę, aby wykonała ona funkcję po określonym czasie. Tym się właśnie zajmuję:

- (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 zmienna jest zadeklarowana w pliku myAppDelegate.h w następujący sposób:

UIBackgroundTaskIdentifier taskIdentifier;

Wszystko działa tak, jak powinno, widzę, że konsola drukuje HELLO tuż po 30 sekundach. Ale ja nie chcędoSomething do wykonania, jeśli aplikacja wejdzie na pierwszy plan do końca 30 sekund. Więc muszę to anulować. W ten sposób to robię:

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

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

Ale niestety nie anulujedoSomething, nadal jest wykonywane. Co ja robię źle? Jak anulować tę funkcję?

questionAnswers(9)

yourAnswerToTheQuestion