2010-10-06 30 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 2010-10-06 09:36:19

+3

OK先生......... – sidhu 2010-10-06 09:39:04

回答

17

需要聲明bgTask分配前:

UIBackgroundTaskIdentifier bgTask = 0; 
+0

感謝先生吧,現在s工作 – sidhu 2010-10-06 09:54:21

+10

感謝。每當我閱讀蘋果公司的這些模糊的文檔之一時,我都想打自己(約90%的文檔)。他們應該聘請懂得如何寫文檔的人。 – SpaceDog 2011-08-25 17:00:40

+24

你想打自己..? – Andy 2012-05-03 13:24:33

10

我不能在以前的答案發表評論,但是初始化UIBackgroundTaskIdentifier你不應該將其設置爲nil或0。您應該將其設置爲:

UIBackgroundTaskInvalid 

documentation UIBackgroundTaskInvalid認爲它應該被用來初始化變量或檢查錯誤。

+0

'UIBackgroundTaskInvalid = 0x0000000000000000'。一樣。 – duci9y 2014-01-11 10:58:03

+5

@ duci9y相信我,你不需要你的代碼中的幻數。堅持API提供的常量。 – Andy 2014-05-13 11:22:52

2

您正在使用bgTask的塊,所以你必須聲明它這樣的..

__block UIBackgroundTaskIdentifier bgTask = 0; 

__block將使該變量在塊的方法使用。它有雙重下劃線。

相關問題