Подтвердить что ты не робот

BeginBackgroundTaskWithExpirationHandler

Я делаю приложение, в котором аудио будет воспроизводиться в фоновом режиме. В следующем коде bgTask не объявлен. Каким объектом должен быть bgTask?

- (void)applicationDidEnterBackground:(UIApplication *)application 
{
    UIApplication  *app = [UIApplication sharedApplication];
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
        [app endBackgroundTask:bgTask]; 
        bgTask = UIBackgroundTaskInvalid;
    }];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{});

    [app endBackgroundTask:bgTask]; 
    bgTask = UIBackgroundTaskInvalid;
}
4b9b3361

Ответ 1

Вам нужно объявить bgTask, прежде чем назначать:

UIBackgroundTaskIdentifier bgTask = 0;

Ответ 2

Я не могу комментировать предыдущие ответы, однако для инициализации UIBackgroundTaskIdentifier вы не должны устанавливать его на нуль или 0. Вы должны установить его на:

UIBackgroundTaskInvalid

В documentation UIBackgroundTaskInvalid говорит, что он должен использоваться для инициализации переменных или для проверки ошибок.

Ответ 3

Вы используете bgTask в блоке, поэтому вам нужно объявить его следующим образом.

__block UIBackgroundTaskIdentifier bgTask = 0;

__block позволит использовать эту переменную в блочном методе. И у него есть двойное подчеркивание.