Joh*_*ohn 9 cocoa-touch objective-c facebook-graph-api ios
我的应用将视频上传到Facebook.即使不耐烦的用户在上传过程中点击"主页"按钮,我也希望在后台完成上传.
经过一番阅读,我试过这个:
UIBackgroundTaskIdentifier bti = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bti];
}];
[fb requestWithGraphPath:@"me/videos"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
[[UIApplication sharedApplication] endBackgroundTask:bti];
Run Code Online (Sandbox Code Playgroud)
这项工作是用fb请求方法完成的.视频通过http连接上传到Facebook.这样可以正常工作,但如果您在上传过程中通过单击"主页"按钮来设置应用程序,则会暂停上载.如果您预览应用程序,则会继续上传.
我希望会发生的是上传将在后台完成.
有什么希望让它工作?我是否在整个beginBackgroundTask中做错了什么?以这种方式工作似乎太简单了,但这就是文档似乎所说的.
任何帮助,非常感谢.
- 约翰
Joh*_*ohn 15
好的,我明白了.您需要在后台完成的长任务开始时执行"开始"代码,即使在应用程序退出后也是如此,然后在任务完成时执行"结束"代码.
我上面的代码过早地执行'end'代码,因此几乎立即结束了后台执行.
做到这一点的方法是做一些事情:
// make sure save can complete in the background
if ([[UIDevice currentDevice] isMultitaskingSupported])
backgroundTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{}];
Run Code Online (Sandbox Code Playgroud)
当长任务开始时.正如上面提到的那样,hypercrypt,'backgroundTaskID必须是一个ivar,或者当长任务完成时你可以得到的东西.
任务完成后,执行以下操作:
if ([[UIDevice currentDevice] isMultitaskingSupported]) {
[[UIApplication sharedApplication] endBackgroundTask:backgroundTaskID];
backgroundTaskID = UIBackgroundTaskInvalid;
}
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力.
您需要调用[[UIApplication sharedApplication] endBackgroundTask:bti];
委托回调.您需要将其存储bti
在ivar中或作为静态变量存储.
归档时间: |
|
查看次数: |
6169 次 |
最近记录: |