问题标签 [nsurlsession]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1242 浏览

ios - 在后台获取IOS时,第一个请求的下载任务为空

我想知道您是否已经看到了这一点,或者可能对为什么在我的代码中看到以下行为有一些想法:我有一个带有后台配置的 NSURLsession。当程序在前台运行并且一切正常时,我会启动定期下载任务。当我模拟backgroundfetch(在xcode中)时,我的任务得到一个空值(即使请求和会话不为空)。当然,在这种情况下,我的会话代表永远不会被解雇来执行完成处理程序。如果我模拟后续的后台提取,它们都会在之后工作。此时,如果我在模拟器中将应用程序置于前台,并模拟另一个后台提取,则症状会全部出现。我在我的 appdelegate 类中使用此代码。

非常感谢您的帮助。

0 投票
3 回答
24288 浏览

ios - iOS/Cocoa - NSURLSession - 处理基本 HTTPS 授权

[编辑以提供更多信息]

(我没有在这个项目中使用 AFNetworking。我将来可能会这样做,但希望先解决这个问题/误解。)

服务器设置

我不能在这里提供真正的服务,但它是一个简单、可靠的服务,它根据 URL 返回 XML,例如:

https://username:password@example.com/webservice

我想使用 GET 通过 HTTPS 连接到 URL,并确定任何身份验证失败(http 状态代码 401)。

我已确认 Web 服务可用,并且我可以使用指定的用户名和密码成功(http 状态代码 200)从 url 中获取 XML。我已经使用 Web 浏览器和 AFNetworking 2.0.3 以及使用 NSURLConnection 完成了此操作。

我还确认我在所有阶段都使用了正确的凭据。

给定正确的凭据和以下代码:

上面的代码将起作用。它将成功连接到服务器,获取http状态码200,并返回(XML)数据。

问题 1

在凭证无效的情况下,这种简单的方法会失败。在这种情况下,永远不会调用完成块,不提供状态代码 (401),最终任务超时。

尝试的解决方案

我为 NSURLSession 分配了一个委托,并正在处理以下回调:

问题 1 使用尝试的解决方案时

请注意使用 ivars _sessionFailureCount 和 _taskFailureCount。我使用这些是因为挑战对象的 @previousFailureCount 属性永远不会高级!无论这些回调方法被调用多少次,它始终保持为零。

问题 2 使用尝试的解决方案时

尽管使用了正确的凭据(正如它们与 nil 委托的成功使用所证明的那样),但身份验证失败了。

发生以下回调:

(NSError 还提供了一个 NSErrorFailingURLKey,它显示 URL 和凭据是正确的。)

欢迎任何建议!

0 投票
1 回答
727 浏览

ios - 组织多个 NSURLSessionTasks

我有一个可以从网站下载文件的 iOS 应用程序。我NSURLSession在课堂上创建了一个Downloads来管理它们。该类Downloads有一个使用我的对象NSMutableArray跟踪所有当前和过去的下载。DownloadItem我对这个设置不满意。

目前,我必须让Downloads班级作为所有下载的代表。我看不到将每个委托分配NSURLSessionDownloadTask给一个DownloadItem对象的方法。所以,我必须将它分配给我的Downloads对象,然后让它找出DownloadItem将消息转发到的方式。

tasksDictionary目前,我通过在 中调用 NSMutableDictionaryDownloads并将taskIdentifier用作键来做到这一点。

这似乎有效,但似乎不是最有效的方法。我还担心我看到创建的第一个 taskIdentifier0会让人很难区分已完成的任务和第一个任务之间的区别。

有没有更好的方法来跟踪这些事情?有没有办法为任务分配新的代表?

0 投票
4 回答
4048 浏览

ios - 基于 NSURLSession 的网络模式

传统上,我一直使用 NSOperation 子类创建和管理自己的 NSURLConnection 的模式。NSOperation 子类由视图控制器实例化,并将在完成工作之前不打扰控制器。当它完成检索数据时,它会执行视图控制器提供的完成块。

  1. ViewController 实例化 NSOperation 子类(封装了 URL、参数等)
  2. NSOperation 子类实例化 NSURLConnection(执行同步请求并检索数据)
  3. NSURLConnection 将数据转储到 NSOperation-subclass
  4. NSOperation-subclass 执行视图控制器提供的完成块。

我现在正在尝试使用 NSURLSession 实现相同的模式。我希望能够将发出网络请求所需的 url 和参数封装在单个对象中。我是否使用 NSURLSession 子类或 NSURLSessionTask 子类来实现这一点?

我喜欢根据参与者设计模式为每个网络操作创建单独的类。

0 投票
0 回答
1577 浏览

ios - 后台下载的 URL 方案无效:有效方案是 http 或 https

由于我的应用程序中的推送通知,我正在使用-[NSURLSessionBackgroundFetch start]后台获取方法。这种方法完全可以正常工作,我的应用程序已成功上传到商店。但是我们的一位用户遇到了以下崩溃:

后台下载的 URL 方案无效:(null)。有效的方案是 http 或 https

我无法得到任何解决方案,为什么这个崩溃发生在生产模式而不是在开发中。此外,只有我们的一个用户遇到了这个崩溃。

0 投票
1 回答
2201 浏览

ios - NSURLSessionTask completionTask 永远不会在使用 GCD 的主队列中调用

我正在使用 iOS 7 NSURLSession 对 RESTful 服务进行一些简单的 GET 操作。这就是我所做的:

以上所有代码都可以正常工作。completionHandler 应该在主队列中被调用。

但是,如果我在 GCD 中使用它,就像这样:

现在,我想我在 dispatch_get_main_queue() 中运行该代码,它应该与会话的 delegateQueue 中指定的 [NSOperationQueue mainQueue] 相同?Tt 应该像第一组代码一样有效地在主线程中运行。但是,我发现完成处理程序永远不会被调用。如果我删除 GCD 代码,它会再次工作。

有没有人尝试过这样做?这应该工作吗?或者我误解了工作被分派到了哪个队列?

0 投票
1 回答
1773 浏览

php - NSURLSessionUploadTask 没有将文件传递给 php 脚本

编辑:好的,我只是将内容类型标头设置为 multipart/form-data 没有区别。我原来的问题如下:


这是我关于堆栈溢出的第一个问题,我希望我做对了。

我只是在学习 Objective-C,最近完成了斯坦福课程的在线版本。我对 php 和 html 几乎一无所知。我使用的 php 脚本和 html 大多是从教程中复制而来的。Obj-C对我来说更有意义。

问题:

我有一个 php 脚本。它上传一个图像文件。从服务器上同一文件夹中的 html 文件调用时,它可以正常工作。当从我的 obj-c 调用它时,我试图让相同的脚本工作。它似乎运行,它返回 200,obj-c 确实调用了 php,但在线文件夹中没有文件出现。

由于它仅在 ios7 中引入,因此在网络上似乎很少有这方面的内容。我没有找到处理文件上传的例子,它们都处理下载,只是说上传是相似的。我所做的似乎满足了我找到的任何教程。

我所知道的是:

  • 当从服务器上的 html 文件中调用 php 时,php 工作,并且文件被上传
  • obj-c 肯定在调用 php 脚本(我在 php 中写了一些日志记录(使用 file_put_contents),以确认在我运行 obj-c 时正在调用脚本)
  • obj-c 几乎肯定是在上传图像文件(如果我在 obj-c 中使用委托方法,它会显示上传进度)
  • 但是 php 脚本没有接收文件(我写入 php 的日志显示 $_FILES 在从 obj-c 调用时没有值。从 html 调用时它按预期工作)
  • 我刚刚编辑了 php 以记录它收到的标头,它确实获得了图像文件的 Content-Length。

可能很重要的事情

  • 我没有添加任何 html 标头,没有我见过的教程说我必须(使用 NSURLSessionUploadTask),我假设 NSURLSessionUploadTask 会为你解决这个问题?还是这是我的问题?
  • [响应描述] 返回 200,引用:{ URL:(PHP 脚本 URL)} { 状态代码:200,标题 { Connection = "Keep-Alive"; “内容类型”=“文本/html”;日期 =“格林威治标准时间 2014 年 1 月 16 日星期四 19:58:10”;“保活”=“超时=5,最大值=100”;服务器=阿帕奇;“传输编码” = 身份;} }
  • html 指定 enctype="multipart/form-data",也许这必须在我的 obj-c 某处工作?
  • 到目前为止,我只在模拟器上运行它
  • 任何帮助将不胜感激!谢谢 :)
  • 编辑,我只是​​编辑了下面的代码以显示 [request setHTTPMethod:@"POST"] 而不是我最初拥有的 [request setHTTPMethod:@"PUSH"] ,但它没有改变。

这是目标C

这是服务器上的 PHP 脚本

这是调用相同脚本时按预期工作的html文件

0 投票
3 回答
26538 浏览

ios - 带有 NSBlockOperation 和队列的 NSURLSession

我有一个应用程序,目前NSURLConnection用于其绝大多数网络。我想搬到那里,NSURLSession因为苹果告诉我这是要走的路。

我的应用程序只是NSURLConnection通过+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error类方法使用同步版本。我在NSBlockOperation运行中执行此操作,NSOperationQueue因此我不会不必要地阻塞主队列。以这种方式做事的一大优势是我可以使操作相互依赖。例如,我可以让请求数据的任务依赖于登录任务的完成。

我没有在NSURLSession. 我能找到的只有一些文章嘲笑我甚至考虑同步使用它,而且我是一个阻塞线程的可怕人。美好的。但我认为没有办法让NSURLSessionTasks 相互依赖。有没有办法做到这一点?

或者有没有描述我将如何以不同的方式做这样的事情?

0 投票
1 回答
10525 浏览

nsurlconnection - 未调用 NSURLSession 委托方法

我创建了一个非常简单的应用程序来从我的 Web 服务器下载文本文件。我可以完美地使用 NSURLConnection,但我正在尝试迁移到 NSURLSession。

我遇到的问题是没有调用任何委托方法。

我的服务器受密码保护,因此我需要使用基本的 http 身份验证来访问文件,但是当 didReceiveChallenge 方法从未被调用时。

代码行 [getFileTask resume] 似乎对任何东西都没有影响。

我的设置如下:

从 viewDidLoad 调用以下方法:

我实现的委托方法是:

谢谢!

0 投票
0 回答
230 浏览

ios - iOS 应用程序 - 为 asp.net Web 应用程序验证用户

对于我是否以正确的方式处理以下内容,我真的很感激。

一位朋友问我是否可以帮助他为他的初创公司制作一个应用程序。他们有一个运行某种风格的 asp.net 应用程序的服务器。

他想要一个允许用户登录和管理其帐户的 iOS 应用程序。

我正在检查 NSURLSession 和 NSURLSessionDataTask。

这是我必须做到的:

当我使用 [task resume] 完成任务时,我会收到该任务的“didReceiveChallenge”。那时我回应:

但是我需要对响应返回的 cookie 做些什么吗?

我在这里很不适应,所以我很感激任何指点!

干杯!

亚当