问题标签 [nsurlcache]

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 投票
0 回答
731 浏览

ios6 - AFURLConnectionOperation + NSURLConnection 在 iOS5.1 & iOS6.0 下表现不同?

我看到 iOS6、AFNetworking 和 NSURLConnection 的问题没有任何意义。

重现问题

  • 提出请求,任何请求,并确保其成功
  • 关闭互联网连接
  • 再次启动应用程序并再次发出相同的请求

iOS5.1

数据被拾取[从我假设的 NSURLCache],并被connectionDidFinishLoading调用。

iOS6.0

数据未被拾取[我验证了 NSURLCache 的 Cache.db 确实在 sqlite db 中有该图像作为 blob],并被connection:didFailWithError:调用。

我在 API 差异中没有发现任何表明NSURLConnection、NSURLRequest 或 NSURLCache有任何相关变化的东西。

结果是,当应用程序在 5.1 上离线运行时调用成功块,而在 iOS6.0 上调用失败块

更新

编写了一个测试来确认 NSURLConnection、NSURLRequest 或 NSURLCache 的行为没有不同。

在http://github.com/abhinittiwari/NSURLCacheTest找到它

0 投票
1 回答
1565 浏览

nsurlconnection - NSURLRequestReturnCacheDataElseLoad 在第一次请求时没有从缓存中加载?

我正在创建一个需要从远程 API 获取大量信息的 iOS 应用程序。有很多 http 请求可以完美缓存,但似乎NSURLConnection缓存不够积极:每次我杀死应用程序并重新启动它时,所有请求都会再次发出,而不是来自缓存(iOS 5应该使用磁盘缓存)。如果我第二次(在应用程序生命周期内)发出相同的请求,它确实来自缓存。

我正在使用该NSURLRequestReturnCacheDataElseLoad策略,并且设置了 http 服务器上的缓存控制标头,因此可以缓存所有内容。

所以问题是每次应用程序启动时都会再次发出所有请求。为什么这不是来自磁盘?

编辑:似乎这个问题只存在于 url 中有查询时。例如,当我请求http://www.apple.com/时,一切都很好,在新的应用程序启动时,实际上没有发出任何请求。当我更改为http://www.apple.com/?test时,总是会发出第一个请求。

编辑2:看起来像TTURLRequest(three20的一部分)并且SDURLCache是解决方案。

0 投票
0 回答
473 浏览

ios - 使用 NSURLCache 为 UIWebView 预加载本地资源

我正在开发一个在 UIWebView 中显示本地存储内容(HTML 文件)的 iOS 应用程序。

问题是从 HTML 引用的一些资产(例如字体和图像)在第一次加载时需要很长时间。我认为问题的解决方案是在将这些资产用于 UIWebView 之前以某种方式使用 NSURLCache 缓存这些资产,但这似乎会造成一些麻烦。

到目前为止我已经尝试过:

  • 子类化 NSURLCache 并覆盖cachedResponseForRequest,以便它返回一个响应,其中包含预加载在 NSData 对象中的资产。预加载是在init方法中完成的。被覆盖的cachedResponseForRequest似乎被调用了,但由于某种原因,UIWebView 仍然从文件系统加载资产。

  • 用于在 UIWebView 中使用storeCachedResponse:forRequest:之前缓存包含资产的 NSCachedURLResponse 对象。

这些似乎都没有帮助。关于在哪里寻找问题的任何建议?

0 投票
1 回答
873 浏览

objective-c - NSURLRequest 显然缓存在 Cache.db 但再次请求

我正在使用此块在 iOS 5 应用程序中同步图像下载。逻辑很简单,如果图像在缓存中使用它,如果不下载它,我想 NSURLRequestReturnCacheDataElseLoad 正是这种行为。

我用三张图片做了一个测试。当我第一次下载它们时,我可以看到消息'downloaded MyimgName1.jpg''downloaded MyimgName2.jpg''downloaded MyimgName3.jpg',通过打开Cache.db,我可以看到我所有的图像都正确存储在其中.

但是,当我尝试再次下载时,只有第一个下载的图像显示消息“MyimgName1.jpg 在缓存中找到”,这意味着对于所有其他 2 和 3 请求,cachedResponse 为 nil:

我在 NSCache 的设置或创建中遗漏了什么吗?

0 投票
1 回答
188 浏览

iphone - 扩展 NSURLCache 不能使用参数

我有一个类 URLCache 扩展 NSURLCache

在 URLCache.m

如果 Am 调用 URLCache.m 那么 A 需要将参数 _pageType 发送到 URLCache,我不知道如何发送 _pageType。我试过了

但每次在上午

得到

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSURLCache setPageType:]:无法识别的选择器发送到实例 0xabd1470”

为什么不能将参数发送到 NSURLCache?

如何发送_pageType?

0 投票
1 回答
549 浏览

objective-c - 使用来自 NSURLCache 的数据

我已经设置了一个 NSURLCache 并将 sharedcache 设置为初始化的缓存。

当我在 NSURLConnection 委托中记录大小时,我可以看到缓存大小在增长。

由于某种原因,当请求相同的数据时,再次向服务器发出请求,缓存大小的日志显示日志保持相同的大小。

这向我表明缓存工作正常,但由于某种原因,URL 加载器没有从缓存中提取。

我对请求使用默认缓存策略,并仔细检查了响应中的标头。

在这里阅读之后,我看到其他人提到了同样的问题,并将内存容量和磁盘容量设置为相同的值可以解决他们的问题,但这对我不起作用。每次都发出新请求,而不是从缓存中提取。

在发出请求之前检查数据缓存是否明智?我没有看到 NSURLRequest 方法的缓存策略参数的意义。

0 投票
1 回答
1405 浏览

memory - NSURLCache :说它的缓存,不是,并且内存统计没有变化

我正在尝试通过记录 NSURLCache 周围的内存统计信息来确认 URL 缓存。

我已经扩展了基础 NSURLCache 如下:

我还有执行以下操作的按钮代码:

当我单击视图上的一些测试按钮以触发 URLConnection 事件时,我看到使用正确的 URL 调用这些方法。但是,缓存内存和磁盘使用统计信息永远不会改变。

来自日志的示例

这让我相信:

1 - 我做错了什么,没有正确观察缓存行为

2 - 这个缓存并不是真正的缓存

任何想法将不胜感激。

0 投票
1 回答
1985 浏览

iphone - 在 iOS 中清除内存警告中的 url 缓存

NSURLCache收到内存警告时清除共享是一种好习惯吗?像这样的东西:

我是否正确地假设这也会不必要地清除磁盘缓存?

如果是这样,是否可以只清除内存缓存?

0 投票
2 回答
1272 浏览

ios - 有没有办法查询 HTML5 应用程序缓存?

有没有办法查询 HTML5 应用程序缓存的内容?

我正在编写一个使用大量缓存 Web 内容的 iOS 应用程序。在应用离线时加载给定页面之前,我想检查该页面是否存在于缓存中。如果没有,我会通知用户他们必须在线才能看到该内容;如果是这样,我会继续加载它。

现在,iOS 有自己的 URL 缓存系统,我最初只是假设我可以这样检查缓存的内容:

傻我。似乎 iOS 的缓存和 HTML5 的缓存是不相关的: -cachedResponseForRequest: 对任何请求都返回 nil,即使我可以看到 URL 在 HTML5 应用程序缓存中(使用 Safari Web 调试器)。

那么,有什么方法可以查询 HTML5 应用程序缓存的内容吗?答案是使用 Objective-C 代码还是 Javascript 并不重要,因为我总是可以从 Objective-C 执行相关的 JS。

0 投票
1 回答
75 浏览

ios6 - iOS6+ 离线管理就像原生缓存管理一样工作

我正在尝试将离线使用添加到应用程序。我只需要 NSURLRequest / NSURLCache 完成的所有工作,同时能够准确选择磁盘存储位置,因此我可以将它放在永远不会被删除的“/Library/Application Support/whatever”中(不要忘记标记,因此它不会在 iCloud / iTunes 上同步)。

我觉得我必须自己完成所有工作,并且我在第一期中运行。NSURLCache 在内存中保存了一个字典,其中键是 NSURLRequest,值是关联的 NSCachedURLResponse。我也在做同样的事情,但是我不能在磁盘上写这本字典,因为它不是由基本类型组成的。

你知道如何在磁盘上写这样一本字典吗?