Tag: nsurlsessiondownloadtask

循环中的多个请求的nsurlsession

我一直在试图下载图像/ TXT,但我需要做的,直到该url存在和下载该图像/ TXT文件,所以我一直调用同样的方法再次&当我设置debugging点,我看到这个 。 如果url是正确的比我没有看到在debugging导航器中的任何队列,因为它不是再次调用方法。 我把AFNetworking库引用到了相同的,但我想它的工作原理与我在NSURLSession中的工作方式一样,对吧? 案例: – 我检查url是否存在,所以如果它的存在比加载两个urls(time.txt&image.png),否则调用WebService(XmlParser)&保持检查URL以下文件。 TIME.TXT + image.png 要么 tryagain.txt 显示任何一个存在。 还检查了这个AFNetworking问题,但没有帮助,因为我不想添加操作的数量。 我想加载文件,无论哪里存在。 因为操作将在AFNetworking / NSURLSession中完成,无论是成功还是失败。 – (无效)下载 { NSString * imageUrl = [NSString stringWithFormat:@“%@”,txtNumber.text]; NSURLSessionConfiguration * sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession * session = [NSURLSession sessionWithConfiguration:sessionConfig 委托:自我 delegateQueue:无]; NSURLSessionDownloadTask * getImageTask = [会话downloadTaskWithURL:[NSURL URLWithString:imageUrl] completionHandler:^(NSURL * location, NSURLResponse *响应, NSError […]

NSURLSessionDownloadTask cancelByProducingResumeData返回null

我使用NSURLSessionDownloadTask从服务器下载文件,它在后台会话中运行。 我想保存简历数据,以恢复应用程序终止时的下载。 但是,cancelByProducingResumeData的调用始终返回null。 我无法弄清楚这个问题,因为我以前做了一个可恢复的下载任务样本。 有人得到同样的问题吗?

下载所有可用的(和新的)文件

我正在使用NSURLSessionDownloadTask从网上下载一些.mov文件,并将它们存储在我的应用程序中。 现在我想实现的是 下载页面上可用的某种types的所有文件(本例中为.mov),而不必指定每个文件的URL 只有下载文件,如果他们还没有存储在我的应用程序。 有没有办法做到这一点?

NSURLSessionDownloadTask在后台自动恢复所有任务

我有要求以连续的顺序下载文件。 目前我能够做到这一点,而应用程序在前台。 以下是我用过的逻辑。 创build下载的所有任务。 一次恢复一个,并且当前完成从URLSession:task:didCompleteWithError:恢复下一个URLSession:task:didCompleteWithError: 这个逻辑工作,而应用程序在前台,但一旦应用程序开始在后台运行(通过崩溃),我们再次运行应用程序,在下载完成所有任务状态已更改为恢复,并同时都在下载。 这是预期的行为或任何我缺less的顺序在后台模式下呢? 编辑:我通过创build下载任务逐一检查。 在完成第一个任务之后创build下一个setTaskDidCompleteBlock等等。 它只完成第一个任务,然后在setTaskDidCompleteBlock内部创build任务时setTaskDidCompleteBlock (这只发生在后台运行时,前台工作正常)。 这里是我的崩溃日志屏幕截图: 和 任何帮助,将不胜感激。

UNNotificationServiceExtension有时不显示图像

我创build了UNNotificationServiceExtension子类来显示通知中的远程附件。 随机,附件不显示。 问题很难重现,但有些用户报告说,在收到带有图像附件的远程通知后,他们看不到图像。 经过一些debugging之后,我遇到了这个问题一次。 我注意到downloadTask()有空location但response的状态码是200 。 override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { // … // Dowload remote media file URLSession.shared.downloadTask(with: attachmentUrl) { (location: URL?, response: URLResponse?, error: Error?) in // … self.contentHandler!(self.bestAttemptContent!) }.resume() } 而且, errorvariables包含: "Error Domain=NSPOSIXErrorDomain Code=2 \"No such file or directory\" UserInfo={NSErrorFailingURLKey=https://<url_to_media_attachment>, NSErrorFailingURLStringKey=https://<url_to_media_attachment>}" 似乎附件获取正确,但URLSession丢失获取附件的location URL。 我不知道这个问题的原因是什么。 […]

BackgroundSession SessionDownloadTasklocking屏幕时,错误:NSPOSIXErrorDomain Code = 1

我有一个带有backgroundSessionConfigurationWithIdentifier的NSURLSessionDownloadTask 。 当我locking屏幕时,会发生以下exception: 错误域= NSPOSIXErrorDomain代码= 1“操作不能完成操作不允许”。 这个错误只发生在我的手机上,不会出现在其他手机上。 下面是简单的代码: NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.edu.downLoadTest"];; AFURLSessionManager *_session = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfiguration]; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://podcasts.apple.com/apple_keynotes_hd/2015/2015_mar_hd_cc.m4v"]]; NSProgress *progress; NSURLSessionDownloadTask *task1 = [_session downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { NSString *a =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; return [NSURL fileURLWithPath:[a stringByAppendingPathComponent:@"test.m4v"]]; } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) […]

URLSessionDidFinishEventsForBackgroundURLSession不调用 – Objective-C

NSURLSession委托方法 URLSessionDidFinishEventsForBackgroundURLSession不是调用? 我已经在项目function设置中启用了背景模式 。 这是代码 AppDelegate.h方法 @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property (nonatomic, copy) void(^backgroundTransferCompletionHandler)(); @end AppDelegate.m方法 -(void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler{ self.backgroundTransferCompletionHandler = completionHandler; } ViewController.m方法 – (void)viewDidLoad { [super viewDidLoad]; //Urls [self initializeFileDownloadDataArray]; NSArray *URLs = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; self.docDirectoryURL = [URLs objectAtIndex:0]; NSURLSessionConfiguration *sessionConfiguration = […]

带有无效恢复数据的NSURLSession

我使用[NSURLSessionConfiguration defaultSessionConfiguration]来configuration我的networking会话。 我通过调用cancelByProducingResumeData:来暂停任务cancelByProducingResumeData:产生一个恢复数据,并将其保存到磁盘。 当我想重新启动任务时,我打电话给downloadTaskWithResumeData: 它运行良好,直到我重新启动应用程序。 我暂停任务后,我杀了应用程序。 然后我再次启动我的应用程序,并调用downloadTaskWithResumeData ,我发现恢复数据是无效的。 我parsing恢复数据到NSDictionary,并得到NSURLSessionResumeInfoLocalPath ,这是 "/private/var/mobile/Containers/Data/Application/5DD071C3-9D5E-4D76-9F74-57B6C92445CB/tmp/CFNetworkDownload_IUI6kg.tmp" 。 我尝试访问这个文件,但它不存在。 我的问题是我怎样才能继续使用简历数据下载任务后,我重新启动我的应用程序。 谢谢。

NSURLSessionDataTask和NSURLSessionDownloadTask有什么不同?

在最新的苹果引入新的NSURLSession来取代NSURLConnection ,所以在这里有不同的任务,那么NSURLSessionDataTask和NSURLSessionDownloadTask什么NSURLSessionDownloadTask呢? 并在哪个场景使用NSURLSessionTask和NSURLSessionDownloadTask ?

从完成处理程序获取来自NSURLSession DownloadTaskWithRequest的数据

所以我很难理解一些东西。 这是我对NSURSession的理解: 一般来说,我有2个选项(据我所知) DataTask(ex dataTaskWithRequest)和DownloadTask(ex DownloadTaskWithRequest ) – 使用他们的委托方法, 或使用完成处理程序,不能做两个。 我设法接收数据使用dataTaskWithRequest像这样: let request = NSMutableURLRequest(URL: dataSourceURL!) request.HTTPMethod = "POST" let postString = "lastid=\(id)" request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in if error != nil { println("error=\(error)") return } if data != nil { println("works") //Handle data } //println("response = \(response)") […]