问题标签 [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.
ios - IOS。NSURLConnection 和 UIView 的 setNeedsDisplay 是否依赖 GCD 进行异步行为?
我最近做了很多 GCD 和异步渲染和数据检索工作,我真的需要确定关于异步是如何完成的心智模型。
我想专注于setNeedsDisplay
方法NSURLConnectionDelegate
套件。
- 异步调用 setNeedsDisplay 是否正确?我经常调用它,
dispatch_async(dispatch_get_main_queue(), ^{})
这让我感到困惑。 - 回调被描述为异步的
NSURLConnectionDelegate
,但它们实际上并没有在主线程/运行循环上同时运行。我对这里的区别很模糊。
更一般地说,在 GCD 的现代 iOS 时代,制作 GCD 的最佳实践是什么,这些方法可以很好地结合在一起。我只是在这里寻找一般指导方针,因为我经常使用它们并且只是尽量不让自己陷入困境。
干杯,
道格
ios - iOS:带有 UIWebView 的 HTTP Basic/Digest Auth
概述
我正在为 iOS 应用程序开发 SAML 登录(单点登录,类似于 openID)解决方案,该解决方案涉及显示带有 a 的视图控制器,UIWebView
并且在处理 HTTP 基本/摘要时遇到了计时和/或超时问题中的身份验证UIWebView
。
具体来说,当客户端收到 HTTP 身份验证质询时,我会弹出一个UIAlertView
提示用户输入用户 ID 和密码的提示。如果用户能够快速输入信息(< 10 秒),它就可以工作。但是,如果该条目花费的时间超过 10 秒,则连接似乎已终止,并且没有任何反应。
问题
- 调用是否有超时
connection:didReceiveAuthenticationChallenge:
会阻止我提示用户输入用户 ID 和密码(并且必须等待用户输入)?有没有人有解决方法(例如,某种方式来延长连接超时)? UIWebView
有没有比 的子类更好的方法来处理来自 a 的 HTTP 基本/摘要身份验证NSURLProtocol
?
详细信息和代码
对于我们需要处理的大多数 SAML 系统,登录将在UIWebView
. 但是,我们需要处理的一些系统回退到对移动浏览器使用 HTTP 基本或 HTTP 摘要身份验证,因此我们也需要能够处理它。
最大的挑战始于 UIWebView 不暴露下面的网络调用这一事实。为了满足我的需要,我创建了一个子类NSURLProtocol
并根据需要注册了它:
SMURLProtocol
这样,当发出 HTTP 基本/身份验证质询时,就会调用此方法,所以我返回 YES,我们可以处理 HTTP 基本和摘要身份验证:
现在我已经告诉网络堆栈 SMURLProtocol 可以处理身份验证挑战,所以它调用
如您所见,我正在启动一个 UIAlertView 来提示用户输入用户 ID 和密码。我必须在主线程上执行此操作,因为(显然,我不确定)网络代码在后台线程上运行。我添加了信号量和明确的 Grand Central Dispatch 代码来解决我看到的偶尔崩溃(基于此线程)。
最后一部分是接受用户 ID 和密码的 UIAlertView 委托为挑战构建凭证:
正如我在概述中所说,如果用户能够在不到 10 秒的时间内输入用户 ID 和密码,这一切都很好。如果需要更长的时间,则连接似乎会超时,并且将凭据传递给质询的发件人无效。
ios6 - 如何使用 connectionDidFinishDownloading:destinationURL: 和 connectionDidFinishLoading:
我已经实现了 NSURLConnectionDownloadDelegate、NSURLConnectionDataDelegate 委托方法,如下所示。
问题是在 connection:didReceiveResponse: 之后, connectionDidFinishDownloading:destinationURL: 被调用但没有 connectionDidFinishLoading: 甚至 connection:didReceiveData: 未被调用。
当我评论 NSURLConnectionDownloadDelegate 方法时,调用其他三个没有任何问题。
我有一个从服务器获取 JSON 的 NSURLConnections。报刊亭使用 NSURLConnectionDataDownloading 委托方法来下载问题。
我该如何管理?
这是我正在实施的所有委托方法
这是我的 .h 文件
这就是我连接到服务器以获取 JSON 的方式
如果需要,这是下载问题的代码
问题在于从服务器获取 JSON 的调用。问题下载工作正常。
nsurlconnection - 如何知道 NSURLResponse 是否来自缓存?
我在特定文件夹上设置了 NSURLCache(../../Application Support/Offline 所以它不会被操作系统随机删除),然后我发送一个带有 NSURLRequestReturnCacheDataElseLoad 策略的 NSURLRequest。
如何判断由符合 NSURLConnectionDelegate 的类处理的响应来自缓存还是来自网络?
iphone - connectionDidFinishLoading 后收到的 NSURLConnection 数据
我有一个关于 NSURLConnection 的问题:我想下载一张图片:
(正确)调用的第一个代表是
在这被调用一次之后:
并立即:
到这里为止一切都是正确的,但是在再次触发 connectionDidFinishLoading 后,同一连接的 didReceiveData 委托,我通过以下方式识别连接:
这可能吗?
更新,更多信息:
我的应用程序触发了许多同时连接,并且我将任何连接的信息存储在字典中,当调用委托时,我使用密钥检索连接信息: NSString * connectionKey = [[[connection originalRequest] URL] absoluteString]; 对于 99% 的连接,一切都很好,但对于一个(每次都一样!)连接我有这种行为
这里是完整的实现:
这是一个委托示例:
ios - NSURLConnection 可以使用安装在设备配置文件中的客户端证书吗?
我有这个设置:
- 配置为使用 ssl 客户端证书身份验证的 tomcat 服务器 (clientAuth=true)
- 安装了有效客户端证书的 ipad(以 .p12 文件的形式通过电子邮件发送并在配置文件下可见)
通过 ios safari 浏览时,ipad 使用客户端证书并对服务器进行身份验证。
但是在代码中,使用 NSURLConnection,它不会连接。在服务器上调试显示客户端根本没有发送和证书。
在客户端我收到这样的错误:
我知道我可以为 NSURLAuthenticationMethodClientCertificate 保护空间的挑战实现委托方法,但如果我这样做,我没有要发送的证书,它安装在设备上并且无法通过代码访问(是吗??)我尝试调用[challenge.sender performDefaultHandlingForAuthenticationChallenge:challenge] 但这似乎没有效果。
我期待 NSURLConnection 会按照 safari 运行并访问已安装的证书,但似乎不是。我不想以某种方式将证书安装到我的应用程序中 - 这就是内置证书管理的用途!
还是我错过了什么?任何帮助表示赞赏。
ios - 多次使用 NSURLConnection
我正在尝试在启动第一个 NSURLConnection 后启动第二个。我的第一个工作完美:适当的代表都被调用,一切都按计划执行。但是,在第一个完成后,我创建了第二个,但什么也没有发生(代表永远不会被调用)。会发生什么?我知道我不能重用相同的 NSURLConnection,但我在再次使用它之前重新初始化它,所以它应该是一个全新的连接。
这是我启动(两个)连接的代码。它是相同的实例变量,但它已重新初始化。另请注意,在第一个完全完成运行之前,第二个不会启动。
objective-c - 在实例中使用 connectiondidFinishLoading 并将数据返回到另一个视图
我是 Cocoa 和 Objective-c 的初学者——所以请原谅我一个可能微不足道的问题。
我目前正在开发一个 XCODE-Project,它通过 NSJSONSerialization 获取一些数据并将其存储以供进一步工作。
在这一步,我将把获取数据的过程封装到一个类中,该类具有一些用于所需参数的设置器(要从中获取的 url 和应该解析为数组的层)。为了使用这个过程,我在这个类中创建了一个方法,它创建一个连接和一个请求并返回应该包含数据的数组。经过一些测试后,我尝试创建此类的一个实例并调用开始获取数据的方法。
我的问题是,从我的新实例“block_stats”调用方法 data_array 并将数据存储在相同类型的数组中 - 数组为空
这种行为的原因是 (didReceiveResponse,didReceiveData,connectionDidFinishLoading) 中的方法的使用是异步工作的,并且 data_array 的返回是在下载完成之前完成的。
包含下载部分的类中的方法:
另一个视图中的 IBAction,它创建实例并调用方法来获取数据
如果有人可以提供一些建议,我将非常高兴。如果它对我来说尽可能容易理解,那就太好了。提前致谢!
ios - [NSURLConnection sendAsynchronousRequest: ...] 是否总是发送完成块?
很可能是一个相当微不足道的问题,但完成块是否总是被调用[NSURLConnection sendAsynchronousRequest: ...]
?或者我必须实现一个超时计时器吗?
考虑以下我MBProgressView
在调用之前添加 a 并仅在完成块中将其删除的情况:
ios - NSURLConnectionDelegate 的连接:willCacheResponse:随机调用
这是我打的非常简单的电话:
我尝试使用在谷歌上找到的 2 个随机 pdf 网址(搜索“truc 文件类型:pdf”):
它们都具有相似的标头(在 connection:didReceiveResponse 中使用 allHeaderFields :):
一个)
二)
但是 connection:willCacheResponse: 只为 url B 调用。我在 Cache.db sqlite 数据库中只找到了 url B。
为什么不缓存 url A?