我在我的应用程序中使用 AFNetworking 并尝试通过使用缓存数据(如果可用)使其在离线模式下工作。
我预计在将请求缓存策略设置为 NSURLRequestReturnCacheDataDontLoad 后,getPath:parameters:success:failure: 将在离线时成功处理缓存数据。但是,即使缓存中有数据(我通过代码检查缓存来验证),getPath 在飞行模式下也会失败。
AFNetworking github 中有一个线程:https ://github.com/AFNetworking/AFNetworking/issues/378 但似乎这个问题根本没有解决。AFNetworking 的作者只是简单地指向苹果的文档,它说:
NSURLRequestReturnCacheDataDontLoad 指定应该使用现有的缓存数据来满足请求,而不管它的年龄或到期日期。如果缓存中不存在对应于 URL 加载请求的现有数据,则不尝试从原始源加载数据,则认为加载失败。此常量指定类似于“离线”模式的行为。
正如苹果所说,NSURLRequestReturnCacheDataDontLoad 是专为离线模式设计的。
我在 iOS6 上测试,我用 NSURLCache 和 SDURLCache 都测试过,结果都是一样的。
请求失败,错误信息:
2012-12-22 03:11:18.988 Testapp[43692:907] 错误:错误域=NSURLErrorDomain 代码=-1009“Internet 连接似乎处于脱机状态。” UserInfo=0x211b87c0 {NSErrorFailingURLStringKey=http://Testapp.com/api/v1/photo/latest/, NSErrorFailingURLKey=http://Testapp.com/api/v1/photo/latest/, NSLocalizedDescription=互联网连接似乎是离线。, NSUnderlyingError=0x211b9720 "互联网连接似乎离线。"}