2016-04-16 14 views
2

プロジェクトでネットワークレイヤーとしてAFNetworkingを使用しています。 イメージの場合、キャッシュに関するいくつかの問題があり、フレームワークを3.0バージョンに更新しました。AFNetworking 3.0 GET/POSTでacceptableContentTypesが設定され、画像のキャッシュがクリアされる

更新プロセス中に、メディアコンテンツ(イメージとビデオ)を取得するリクエストにいくつかの問題があります。

これは私のクラスである:

+ (void)requestWithMethod:(NSString*)methodTypeValue path:(NSString*)pathValue parameters:(NSDictionary *)params token:(NSString*)token debug:(BOOL)debug completionHandler:(void (^)(id result, NSError *error))block { 
    if(debug){ 
     NSLog(@"Method Type = %@ \n",methodTypeValue); 
     NSLog(@"Link = %@ \n",pathValue); 
     NSLog(@"Token = %@", token); 
    } 

    NSString *linkRequest = [NSString stringWithFormat:@"%@%@",GatewayRoot,pathValue]; 
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 

    NSMutableURLRequest *req = [[AFJSONRequestSerializer serializer] requestWithMethod:methodTypeValue URLString:linkRequest parameters:nil error:nil]; 

    [req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    if (token) { 
     [req setValue:token forHTTPHeaderField:@"AccessToken"]; 
    } 

    [[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 
     if (!error) { 
       if (debug) { 
        NSLog(@"response:\n %@ \n",responseObject); 
       } 
      block(responseObject,nil); 
     } else { 
      NSLog(@"Error: %@, %@, %@", error, response, responseObject); 
      block(nil, error); 
     } 
    }] resume]; 
} 

私がテストをしたし、すべてが正常な要求に関連結構です。 私は、サーバーからいくつかの画像や動画をフェッチする必要があると私は、このエラーが表示されます。

NSLocalizedDescriptionは=要求は失敗しました:容認できないコンテンツタイプを:画像/ PNG NSLocalizedDescription =要求が失敗しました:容認できないコンテンツタイプ:ビデオ/ MP4を

私はこの方法でコンテンツタイプを設定しようとしました:

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"image/jpeg",@"video/mpeg",...nil]; 

manager.responseSerializer.acceptableContentTypes =[manager.responseSerializer.acceptableContentTypes setByAddingObject:@"image/jpeg",@"video/mpeg",...nil]; 
  1. 受け入れ可能なコンテンツタイプを設定する方法を教えてください。

  2. イメージキャッシュに関する他の問題があります:古いバージョンでログインしてユーザープロファイルイメージを取得し、ログアウトして別の資格情報で再ログインした後、ユーザープロファイル用に同じイメージを受信しましたAFNetworkingの画像キャッシュに問題がありました)。

クリアキャッシュリクエストフローを手伝ってもらえますか?

ありがとうございました!

+1

あなたの質問とは無関係に、 'AFJSONRequestSerializer'を使用すると、私は' Content-Type'を自分で設定する必要はないと思います。私はAFNetworkingがあなたにそれをすると信じています。 – Rob

答えて

4

受け入れ可能なコンテンツタイプを自分で設定するのではなく、適切なresponseSerializerを指定するだけでよいでしょう。たとえば、あなたがUIImageをしたい場合は、あなたが行うことができます:

manager.responseSerializer = [AFImageResponseSerializer serializer]; 

あなたがNSDataをしたい場合は、あなたが行うことができます:

manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

をあなたはあなたの要求をキャッシュしたくない場合は、 req.cachePolicyNSURLRequestReloadIgnoringCacheDataに設定するか、AFURLSessionManagerキャッシュ応答ブロックsetDataTaskWillCacheResponseBlockを実装する必要があります。もちろん、キャッシュされるべきではないリソースがヘッダーフィールドを適切に設定できるように、サーバーを変更することもできます。

+0

ありがとうございました!私は変更を加え、今はすべてが問題ありません。 –

関連する問題