beginBackgroundTaskWithExpirationHandler

时间:2010-10-06 09:32:45

标签: iphone cocoa-touch

我正在创建一个音频将在后台播放的应用程序。在以下代码中,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;
}

3 个答案:

答案 0 :(得分:17)

您需要在分配之前声明bgTask:

UIBackgroundTaskIdentifier bgTask = 0;

答案 1 :(得分:10)

我无法对之前的答案发表评论,但是要初始化UIBackgroundTaskIdentifier,您不应将其设置为nil或0.您应该将其设置为:

UIBackgroundTaskInvalid

documentation UIBackgroundTaskInvalid中,它应该用于初始化变量或检查错误。

答案 2 :(得分:2)

你正在使用块中的bgTask,所以你必须像这样声明它。

__block UIBackgroundTaskIdentifier bgTask = 0;

__block将允许此变量在块方法中使用。它有双重下划线。