Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在MKNetworkKit或MKNetworkEngine中禁用缓存?_Iphone_Ios_Ipad_Networking_Mknetworkengine - Fatal编程技术网

Iphone 如何在MKNetworkKit或MKNetworkEngine中禁用缓存?

Iphone 如何在MKNetworkKit或MKNetworkEngine中禁用缓存?,iphone,ios,ipad,networking,mknetworkengine,Iphone,Ios,Ipad,Networking,Mknetworkengine,我试图使用MKNetworkEngine,但标题中提到了缓存。这对我的应用程序来说是完全不好的,它需要下载货币汇率JSON文件,缓存是不可能的 有没有办法关闭整个MKNetworkEngine实例的缓存?第一件事:您真的确定缓存用例吗?大多数提供web服务的股票都将其缓存Pragma/ETags头设置为合理的值。如果他们这样做,MKNetworkKit将做正确的事情,并且只会对您的代码进行缓存命中响应(如果这对您的请求有效) 除非如此,您可以通过两种方法控制缓存的利用率。权利来源: 调用enqu

我试图使用MKNetworkEngine,但标题中提到了缓存。这对我的应用程序来说是完全不好的,它需要下载货币汇率JSON文件,缓存是不可能的


有没有办法关闭整个MKNetworkEngine实例的缓存?

第一件事:您真的确定缓存用例吗?大多数提供web服务的股票都将其缓存Pragma/ETags头设置为合理的值。如果他们这样做,MKNetworkKit将做正确的事情,并且只会对您的代码进行缓存命中响应(如果这对您的请求有效)

除非如此,您可以通过两种方法控制缓存的利用率。权利来源:

调用
enqueoperation:forceReload:
,并将forceReload设置为
YES
,即可完成此操作。像这样:

-(MKNetworkOperation *)myNetworkOperation onCompletion:(MYComplectionBlock)completionBlock onError:(MKNKErrorBlock)errorBlock {

    MKNetworkOperation *op = [self operationWithPath:kURLPath params:nil httpMethod:@"GET" ssl:NO];
    [op onCompletion:^(MKNetworkOperation *completedOperation) {
        // handle the response
        completionBlock(...)
    } onError:^(NSError *error) {
        errorBlock(error);
    }];

    [self enqueueOperation:op forceReload:YES];
    return op;  
}
此外,您还可以在
[self-enqueueOperation:op]
子类内部调用
[self-enqueueOperation:op]
明确清空缓存(注意,这意味着清空所有请求的缓存)

-(MKNetworkOperation *)myNetworkOperation onCompletion:(MYComplectionBlock)completionBlock onError:(MKNKErrorBlock)errorBlock {

    MKNetworkOperation *op = [self operationWithPath:kURLPath params:nil httpMethod:@"GET" ssl:NO];
    [op onCompletion:^(MKNetworkOperation *completedOperation) {
        // handle the response
        completionBlock(...)
    } onError:^(NSError *error) {
        errorBlock(error);
    }];

    [self emptyCache];
    [self enqueueOperation:op];
    return op;  
}

我正在做forceReload:是的,但它仍然只从缓存中获取结果。当我这样做的时候:如果([op isCachedResponse])[self sendrequestreach];它每次都会给我缓存的数据。也许你在某种透明缓存代理的后面?
-(MKNetworkOperation *)myNetworkOperation onCompletion:(MYComplectionBlock)completionBlock onError:(MKNKErrorBlock)errorBlock {

    MKNetworkOperation *op = [self operationWithPath:kURLPath params:nil httpMethod:@"GET" ssl:NO];
    [op onCompletion:^(MKNetworkOperation *completedOperation) {
        // handle the response
        completionBlock(...)
    } onError:^(NSError *error) {
        errorBlock(error);
    }];

    [self emptyCache];
    [self enqueueOperation:op];
    return op;  
}