2010-10-06 3 views
14

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

- (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; 
} 
+2

правильно отформатируйте свой код. – Pavan

+3

ok sir ......... – sidhu

ответ

17

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

UIBackgroundTaskIdentifier bgTask = 0; 
+0

спасибо, сэр, сейчас работает – sidhu

+10

спасибо. Я хочу шлепать себя каждый раз, когда я читаю один из этих расплывчатых документов, написанных Apple (~ 90% их документов). Они должны нанимать людей, которые знают, как писать документы. – SpaceDog

+24

Вы хотите отшлепать себя ..? – Andy

10

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

UIBackgroundTaskInvalid 

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

+0

'UIBackgroundTaskInvalid = 0x0000000000000000'. То же самое. – duci9y

+5

@ duci9y поверьте мне, вам не нужны магические числа в вашем коде. Придерживайтесь констант, предоставляемых API. – Andy

2

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

__block UIBackgroundTaskIdentifier bgTask = 0; 

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