问题标签 [nsurlconnectiondelegate]

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 回答
145 浏览

ios - IOS。NSURLConnection 和 UIView 的 setNeedsDisplay 是否依赖 GCD 进行异步行为?

我最近做了很多 GCD 和异步渲染和数据检索工作,我真的需要确定关于异步是如何完成的心智模型。

我想专注于setNeedsDisplay方法NSURLConnectionDelegate套件。

  1. 异步调用 setNeedsDisplay 是否正确?我经常调用它,dispatch_async(dispatch_get_main_queue(), ^{})这让我感到困惑。
  2. 回调被描述为异步的NSURLConnectionDelegate,但它们实际上并没有在主线程/运行循环上同时运行。我对这里的区别很模糊。

更一般地说,在 GCD 的现代 iOS 时代,制作 GCD 的最佳实践是什么,这些方法可以很好地结合在一起。我只是在这里寻找一般指导方针,因为我经常使用它们并且只是尽量不让自己陷入困境。

干杯,
道格

0 投票
0 回答
2588 浏览

ios - iOS:带有 UIWebView 的 HTTP Basic/Digest Auth

概述

我正在为 iOS 应用程序开发 SAML 登录(单点登录,类似于 openID)解决方案,该解决方案涉及显示带有 a 的视图控制器,UIWebView并且在处理 HTTP 基本/摘要时遇到了计时和/或超时问题中的身份验证UIWebView

具体来说,当客户端收到 HTTP 身份验证质询时,我会弹出一个UIAlertView提示用户输入用户 ID 和密码的提示。如果用户能够快速输入信息(< 10 秒),它就可以工作。但是,如果该条目花费的时间超过 10 秒,则连接似乎已终止,并且没有任何反应。

问题

  1. 调用是否有超时connection:didReceiveAuthenticationChallenge:会阻止我提示用户输入用户 ID 和密码(并且必须等待用户输入)?有没有人有解决方法(例如,某种方式来延长连接超时)?
  2. UIWebView有没有比 的子类更好的方法来处理来自 a 的 HTTP 基本/摘要身份验证NSURLProtocol

详细信息和代码

对于我们需要处理的大多数 SAML 系统,登录将在UIWebView. 但是,我们需要处理的一些系统回退到对移动浏览器使用 HTTP 基本或 HTTP 摘要身份验证,因此我们也需要能够处理它。

最大的挑战始于 UIWebView 不暴露下面的网络调用这一事实。为了满足我的需要,我创建了一个子类NSURLProtocol并根据需要注册了它:

SMURLProtocol这样,当发出 HTTP 基本/身份验证质询时,就会调用此方法,所以我返回 YES,我们可以处理 HTTP 基本和摘要身份验证:

现在我已经告诉网络堆栈 SMURLProtocol 可以处理身份验证挑战,所以它调用

如您所见,我正在启动一个 UIAlertView 来提示用户输入用户 ID 和密码。我必须在主线程上执行此操作,因为(显然,我不确定)网络代码在后台线程上运行。我添加了信号量和明确的 Grand Central Dispatch 代码来解决我看到的偶尔崩溃(基于此线程)。

最后一部分是接受用户 ID 和密码的 UIAlertView 委托为挑战构建凭证:

正如我在概述中所说,如果用户能够在不到 10 秒的时间内输入用户 ID 和密码,这一切都很好。如果需要更长的时间,则连接似乎会超时,并且将凭据传递给质询的发件人无效。

0 投票
2 回答
1678 浏览

ios6 - 如何使用 connectionDidFinishDownloading:destinationURL: 和 connectionDidFinishLoading:

我已经实现了 NSURLConnectionDownloadDelegate、NSURLConnectionDataDelegate 委托方法,如下所示。

问题是在 connection:didReceiveResponse: 之后, connectionDidFinishDownloading:destinationURL: 被调用但没有 connectionDidFinishLoading: 甚至 connection:didReceiveData: 未被调用。

当我评论 NSURLConnectionDownloadDelegate 方法时,调用其他三个没有任何问题。

我有一个从服务器获取 JSON 的 NSURLConnections。报刊亭使用 NSURLConnectionDataDownloading 委托方法来下载问题。

我该如何管理?

这是我正在实施的所有委托方法

这是我的 .h 文件

这就是我连接到服务器以获取 JSON 的方式

如果需要,这是下载问题的代码

问题在于从服务器获取 JSON 的调用。问题下载工作正常。

0 投票
1 回答
2436 浏览

nsurlconnection - 如何知道 NSURLResponse 是否来自缓存?

我在特定文件夹上设置了 NSURLCache(../../Application Support/Offline 所以它不会被操作系统随机删除),然后我发送一个带有 NSURLRequestReturnCacheDataElseLoad 策略的 NSURLRequest。

如何判断由符合 NSURLConnectionDelegate 的类处理的响应来自缓存还是来自网络?

0 投票
2 回答
1111 浏览

iphone - connectionDidFinishLoading 后收到的 NSURLConnection 数据

我有一个关于 NSURLConnection 的问题:我想下载一张图片:

(正确)调用的第一个代表是

在这被调用一次之后:

并立即:

到这里为止一切都是正确的,但是在再次触发 connectionDidFinishLoading 后,同一连接的 didReceiveData 委托,我通过以下方式识别连接:

这可能吗?

更新,更多信息:

我的应用程序触发了许多同时连接,并且我将任何连接的信息存储在字典中,当调用委托时,我使用密钥检索连接信息: NSString * connectionKey = [[[connection originalRequest] URL] absoluteString]; 对于 99% 的连接,一切都很好,但对于一个(每次都一样!)连接我有这种行为


这里是完整的实现:

这是一个委托示例:

0 投票
1 回答
1796 浏览

ios - NSURLConnection 可以使用安装在设备配置文件中的客户端证书吗?

我有这个设置:

  1. 配置为使用 ssl 客户端证书身份验证的 tomcat 服务器 (clientAuth=true)
  2. 安装了有效客户端证书的 ipad(以 .p12 文件的形式通过电子邮件发送并在配置文件下可见)

通过 ios safari 浏览时,ipad 使用客户端证书并对服务器进行身份验证。

但是在代码中,使用 NSURLConnection,它不会连接。在服务器上调试显示客户端根本没有发送和证书。

在客户端我收到这样的错误:

我知道我可以为 NSURLAuthenticationMethodClientCertificate 保护空间的挑战实现委托方法,但如果我这样做,我没有要发送的证书,它安装在设备上并且无法通过代码访问(是吗??)我尝试调用[challenge.sender performDefaultHandlingForAuthenticationChallenge:challenge] 但这似乎没有效果。

我期待 NSURLConnection 会按照 safari 运行并访问已安装的证书,但似乎不是。我不想以某种方式将证书安装到我的应用程序中 - 这就是内置证书管理的用途!

还是我错过了什么?任何帮助表示赞赏。

0 投票
1 回答
1047 浏览

ios - 多次使用 NSURLConnection

我正在尝试在启动第一个 NSURLConnection 后启动第二个。我的第一个工作完美:适当的代表都被调用,一切都按计划执行。但是,在第一个完成后,我创建了第二个,但什么也没有发生(代表永远不会被调用)。会发生什么?我知道我不能重用相同的 NSURLConnection,但我在再次使用它之前重新初始化它,所以它应该是一个全新的连接。

这是我启动(两个)连接的代码。它是相同的实例变量,但它已重新初始化。另请注意,在第一个完全完成运行之前,第二个不会启动。

0 投票
1 回答
2673 浏览

objective-c - 在实例中使用 connectiondidFinishLoading 并将数据返回到另一个视图

我是 Cocoa 和 Objective-c 的初学者——所以请原谅我一个可能微不足道的问题。

我目前正在开发一个 XCODE-Project,它通过 NSJSONSerialization 获取一些数据并将其存储以供进一步工作。

在这一步,我将把获取数据的过程封装到一个类中,该类具有一些用于所需参数的设置器(要从中获取的 url 和应该解析为数组的层)。为了使用这个过程,我在这个类中创建了一个方法,它创建一个连接和一个请求并返回应该包含数据的数组。经过一些测试后,我尝试创建此类的一个实例并调用开始获取数据的方法。

我的问题是,从我的新实例“block_stats”调用方法 data_array 并将数据存储在相同类型的数组中 - 数组为空

这种行为的原因是 (didReceiveResponse,didReceiveData,connectionDidFinishLoading) 中的方法的使用是异步工作的,并且 data_array 的返回是在下载完成之前完成的。


包含下载部分的类中的方法:


另一个视图中的 IBAction,它创建实例并调用方法来获取数据


如果有人可以提供一些建议,我将非常高兴。如果它对我来说尽可能容易理解,那就太好了。提前致谢!

0 投票
3 回答
5208 浏览

ios - [NSURLConnection sendAsynchronousRequest: ...] 是否总是发送完成块?

很可能是一个相当微不足道的问题,但完成块是否总是被调用[NSURLConnection sendAsynchronousRequest: ...]?或者我必须实现一个超时计时器吗?

考虑以下我MBProgressView在调用之前添加 a 并仅在完成块中将其删除的情况:

0 投票
1 回答
906 浏览

ios - NSURLConnectionDelegate 的连接:willCacheResponse:随机调用

这是我打的非常简单的电话:

我尝试使用在谷歌上找到的 2 个随机 pdf 网址(搜索“truc 文件类型:pdf”):

它们都具有相似的标头(在 connection:didReceiveResponse 中使用 allHeaderFields :):

一个)

二)

但是 connection:willCacheResponse: 只为 url B 调用。我在 Cache.db sqlite 数据库中只找到了 url B。

为什么不缓存 url A?