2

MKNetworkEngine を使用しようとしていますが、ヘッダーはキャッシュについて説明しています。これは、為替レートの JSON ファイルをダウンロードする必要がある私のアプリにとってはまったく問題であり、キャッシュは使用できません。

MKNetworkEngine インスタンス全体のキャッシュをオフにする方法はありますか?

4

1 に答える 1

6

まず最初に:キャッシングのユースケースについて本当に確信していますか?Webサービスを提供するこれらの株式のほとんどは、Cache-Pragma/ETagsヘッダーを妥当な値に設定します。そうする場合、MKNetworkKitは正しいことを行い、これがリクエストに対して有効である場合にのみ、キャッシュヒットでコードに応答します。

それでも、2つの方法でキャッシュの使用率を制御できます。MKNetworkEngine.hから直接:

    /*!
 *  @abstract Enqueues your operation into the shared queue.
 *  
 *  @discussion
 *  The operation you created is enqueued to the shared queue. 
 *  When forceReload is NO, this method behaves like enqueueOperation:
 *  When forceReload is YES, No cached data will be returned even if cached data is available.
 *  @seealso
 *  enqueueOperation:
 */
-(void) enqueueOperation:(MKNetworkOperation*) operation forceReload:(BOOL) forceReload;

enqeueOperation: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 emptyCache]直前を呼び出すことで、キャッシュを明示的に空にすることができます(つまり、すべてのリクエストのキャッシュを空にすることに注意してください)。[self enqueueOperation:op]MKNetworkEngine

-(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;  
}
于 2012-09-21T14:43:41.560 に答える