【问题标题】:AFNetworking (AFHttpClient) offline mode not working with NSURLRequestReturnCacheDataDontLoad policyAFNetworking (AFHttpClient) 离线模式不适用于 NSURLRequestReturnCacheDataDontLoad 策略
【发布时间】:2012-12-09 18:12:40
【问题描述】:

我在我的应用程序中使用 AFNetworking,并尝试通过使用缓存数据(如果可用)使其在离线模式下工作。

我预计在将请求缓存策略设置为 NSURLRequestReturnCacheDataDontLoad 后,getPath:parameters:success:failure: 将在离线时成功处理缓存数据。但是,即使缓存中有数据(我通过代码检查缓存来验证),getPath 在飞行模式下也会失败。

AFNetworking github 中有一个帖子:https://github.com/AFNetworking/AFNetworking/issues/378 但似乎这个问题根本没有解决。 AFNetworking 的作者直接指向Apple's document,它说:

NSURLRequestReturnCacheDataDontLoad 指定现有缓存 数据应用于满足请求,无论其年龄或 截止日期。如果缓存中没有现有数据 对应于 URL 加载请求,不尝试加载 来自原始源的数据,并且负载被认为具有 失败的。此常量指定类似于 “离线”模式。

正如苹果所说,NSURLRequestReturnCacheDataDontLoad 是专为离线模式设计的。

我在 iOS6 上测试,我用 NSURLCache 和 SDURLCache 都测试过,结果都是一样的。

请求失败,错误信息:

2012-12-22 03:11:18.988 Testapp[43692:907] 错误:错误 Domain=NSURLErrorDomain Code=-1009 "互联网连接似乎 离线。” UserInfo=0x211b87c0 {NSErrorFailingURLStringKey=http://Testapp.com/api/v1/photo/latest/, NSErrorFailingURLKey=http://Testapp.com/api/v1/photo/latest/, NSLocalizedDescription=互联网连接似乎离线。, NSUnderlyingError=0x211b9720 "互联网连接似乎是 离线。”}

【问题讨论】:

    标签: ios ios5 afnetworking offline-caching


    【解决方案1】:

    原来,这是 iOS 6 中的一个错误。

    AFNetworking 中有专门针对这个问题的讨论帖:https://github.com/AFNetworking/AFNetworking/issues/566

    感谢 Guykogus 对此问题的提示和实验。我在这个问题上花了一个晚上!

    一个总结的解决方法是从缓存中读取响应,而不是使用 NSURLRequestReturnCacheDataDontLoad 策略:

    NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
    if (cachedResponse != nil &&
        [[cachedResponse data] length] > 0)
    {
        // Get cached data
        ....
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2020-08-25
      • 1970-01-01
      • 2020-07-10
      • 2017-04-09
      • 2019-02-17
      • 1970-01-01
      相关资源
      最近更新 更多