NSURLSession数据任务 - 处理检索到的数据

时间:2014-02-18 13:56:24

标签: ios ios7 background

我希望我的iOS应用程序在后台从服务器下载一些产品信息。它应该在app active和inactive模式下工作。

使用NSURLSessionDataTask我可以获取数据。但无法以非活动模式处理数据。

如果我可以在app处于后台/非活动状态时处理数据,请指导我吗?或任何其他建议。

请参阅下面的代码:

NSURLSessionConfiguration *sessionConfig=[NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
NSURLSessionDataTask *sessinURLResData = [session dataTaskWithURL:urlIs completionHandler:^(NSData * dataa,NSURLResponse *response,NSError * error){
    responseData = dataa;// process the data and save in local DB
}];
[sessinURLResData resume];

1 个答案:

答案 0 :(得分:4)

至少有两种背景提取:

  1. 如果您希望自己的应用在未在前台运行时定期检查数据,可以在应用的“功能”中启用“后台获取”,然后您的应用委托在{{1}中执行该获取}。您只能快速(30秒或更短)网络请求。但是您的应用程序会执行网络请求,并从应用程序委托调用相应的完成处理程序代码,报告失败,存在新数据或缺少新数据:

    performFetchWithCompletionHandler
  2. 完全不同类型的后台网络请求是后台- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { NSURL *url = [NSURL URLWithString:@"..."]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionTask *task = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error) { completionHandler(UIBackgroundFetchResultFailed); return; } BOOL foundNewData; // parse the data; setting `foundNewData` as appropriate if (foundNewData) { completionHandler(UIBackgroundFetchResultNewData); } else { completionHandler(UIBackgroundFetchResultNoData); } }]; [task resume]; } ,非常适合在后台进行大量下载/上传。为此,即使应用程序不再处于前台(即使应用程序已终止),您启动的任何下载/上传也将继续,并且当它们全部完成时,您的应用程序将在必要时重新启动,并且相应的委托方法将是调用。但是,要做到这一点,你必须:

    • 使用NSURLSessionConfiguration;

    • 使用基于委托的[NSURLSessionConfiguration backgroundSessionConfiguration:identifier](你是);

    • 使用下载或上传任务,而不是数据任务;

    • 使用使用完成块的下载/上传任务工厂方法(您必须实现委托方法);

    • 让应用委托回复NSURLSession,抓取handleEventsForBackgroundURLSession;以及

    • 在会话委托中实施completionHandler,当您完成所有处理后,会委托URLSessionDidFinishEventsForBackgroundURLSession:

  3. 还有其他技术可用于执行后台请求,但这些是iOS7的两个主要特定后台网络。您还没有告诉我们您正在使用哪些,也没有向我们展示足够的代码来诊断出现了什么问题。