YTKNetwork icon indicating copy to clipboard operation
YTKNetwork copied to clipboard

获取到上次缓存之后,并不会请求数据。

Open Randy1993 opened this issue 8 years ago • 4 comments

在我们实际的测试中发现设置cacheTimeInSeconds确实能起到缓存的作用,但是在缓存有效期内,加载缓存之后并不会请求数据。这与文档中"关于显示上次请求数据"章节所描述的不一致,虽然成功的回调会被调用。 望查验。

Randy1993 avatar Feb 06 '18 03:02 Randy1993

『显示上次请求数据』 指的是先直接调用 -loadCacheWithError 直接读取数据,解析后并显示,然后再调用 -startWith... 方法正常发起请求。

    // 1. 创建 api request
    NSString *userId = @"1";
    GetUserInfoApi *api = [[GetUserInfoApi alloc] initWithUserId:userId];
    
    // 2. 加载缓存
    if ([api loadCacheWithError:nil]) {
        NSDictionary *json = [api responseJSONObject];
        NSLog(@"json = %@", json);
        // show cached data
    }

    api.animatingText = @"正在加载";
    api.animatingView = self.view;

    // 3. 发起请求
    [api startWithCompletionBlockWithSuccess:^(YTKBaseRequest *request) {
        NSLog(@"update ui");
    } failure:^(YTKBaseRequest *request) {
        NSLog(@"failed");
    }];

这里的缓存数据显示和网络请求是两件独立的事,不知道你的需求是什么样的?

cacheTimeInSeconds 只在检查缓存有效性时才会用到,代表的是缓存的有效时长。只有在这个值大于或者等于 0 时, YTKRequest 才会缓存接口返回的数据。

另外,YTKRequest 有一个 ignoreCache 属性,设为 YES 可以使得在网络请求时不读取缓存,默认是 NO。如果你只需要在第一次请求时加载缓存数据,把 ignoreCache 属性设为 YES 即可。

ShannonChenCHN avatar Feb 28 '18 09:02 ShannonChenCHN

@ShannonChenCHN

api.animatingText = @"正在加载";
api.animatingView = self.view;

这段代码哪里来的呀?

yangzheng006 avatar May 08 '18 10:05 yangzheng006

@yangzheng006 这是 YTKNetwork 官方的 demo 里面的,只是个示例。

ShannonChenCHN avatar May 09 '18 07:05 ShannonChenCHN

@ShannonChenCHN thx

yangzheng006 avatar May 21 '18 04:05 yangzheng006