AFNetworkingを追加して返したデータの種類について

1964 ワード

1、AFNetworkingのソースコードから、デフォルトサポートのリターンデータのタイプは以下の通りであることが分かります.
- (instancetype)init {
    self = [super init];
    if (!self) {
        return nil;
    }

    self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];

    return self;
}
他のデータタイプをサポートしたい場合、例えば@「text/html」、@「text/xml」のようにサポートタイプを追加します.
@interface MyHttp : AFHTTPSessionManager

+(instancetype)sharedInstance;

@end
@implementation MyHttp

+(instancetype)sharedInstance{
    static MyHttp *myHttp = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        //URL
        myHttp = [[MyHttp alloc]initWithBaseURL:[NSURL URLWithString:xBaseUrl]];
        
        //           
        NSMutableSet *acceptableSet = [NSMutableSet setWithSet:myHttp.responseSerializer.acceptableContentTypes];
        [acceptableSet addObject:@"text/html"];
        myHttp.responseSerializer.acceptableContentTypes = acceptableSet;
        
    });
}

-(instancetype)initWithBaseURL:(NSURL *)url{
    self = [super initWithBaseURL:url];
    if (self) {
    }
    return self;
}
@end
リターンデータのサポートタイプを追加しました.データを解析するときは、インターフェースのドキュメントに従って対応する処理ができます.(一般的にはAFNetworkingの二次パッケージの中では判断しません.全部業務層に行って判断します.プロジェクトのほとんどのインターフェースはJsonに戻ります.一つか二つのインターフェースだけが他のタイプのデータに戻ります.)もちろんデータを判断しないなら、それも可能です.
if([responseObject isKindOfClass:[NSDictionary class]]){
    NSLog(@"%@",responseObject);
 }
  //xml/html
else if([responseObject isKindOfClass:[NSData class]]){
    NSLog(@"%@",responseObject);
}
ネットワーク要求が単一の例として作成された場合、以下のようなタイプのサポートは不適切です.
myHttp.responseSerializer = [AFJSONResponseSerializer serializer];
//myHttp.responseSerializer = [AFXMLParserResponseSerializer serializer];
以上のように、jsonタイプだけをサポートします.xmlに戻るとエラーが発生します.ですから、一例では、サポートタイプを追加するのが適当です.戻る時は具体的なタイプによって具体的に処理します.