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に戻るとエラーが発生します.ですから、一例では、サポートタイプを追加するのが適当です.戻る時は具体的なタイプによって具体的に処理します.