beginBackgroundTaskWithExpirationHandler

sid*_*dhu 14 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;
}
Run Code Online (Sandbox Code Playgroud)

wil*_*ood 17

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

UIBackgroundTaskIdentifier bgTask = 0;
Run Code Online (Sandbox Code Playgroud)

  • 你想打自己......? (25认同)
  • 只是为了澄清,它应该是`UIBackgroundTaskIdentifier bgTask = 0;`因为它是一个`NSUInteger`. (12认同)
  • 谢谢.每当我读到Apple撰写的这些模糊文档(约90%的文档)时,我都想打自己.他们应该聘请知道如何撰写文档的人. (10认同)

Bon*_*est 10

我不能评论以前的答案,但是要初始化UIBackgroundTaskIdentifier,你不应该将它设置为nil或0.你应该将它设置为:

UIBackgroundTaskInvalid
Run Code Online (Sandbox Code Playgroud)

在UIBackgroundTaskInvalid 文档中,它应该用于初始化变量或检查错误.

  • @ duci9y相信我,你不需要代码中的魔术数字.坚持API提供的常量. (6认同)