AFNetworking 3.x移行ガイド

4914 ワード

新しいデバイス要件:iOS 7、Mac OS X 10.9、watchOS 2、tvOS 9、&Xcode 7
AFNetworking 3.0で正式にサポートされているiOS 7、Mac OS Xの10.9、watchOS 2、tvOS 9、Xcode 7.旧バージョンのSDKプロジェクトでAFNetworkingを使用したい場合は、READMEの互換性情報を確認してください.
NSURLConnectionのAPIは破棄されました
AFNetworking 1.0はNSURLConnectionのベースAPIの上に構築され、AFNetworking 2.0はNSURLConnectionのベースAPIの使用を開始し、NSURLSessionベースの新しいAPIのオプションを使用します.AFNetworking 3.0は現在、NSURLSessionのAPIに完全に基づいており、メンテナンスの負担を低減し、アップルがNSURLSessionに提供する追加機能を強化することをサポートしています.Xcode 7ではNSURLConnectionのAPIがアップルに正式に廃棄された.APIは引き続き動作するが、新しい機能は追加されず、アップルはNSURLSessionを十分に発展させるためにネットワークベースのすべての機能を通知した.
AFNetworking 2.Xは引き続き重要な危険性とセキュリティパッチを取得しますが、新しい機能は追加されません.Alamofire(Swiftでのネットワークリクエスト)ソフトウェア財団は、すべてのプロジェクトをNSURLSessionベースのAPIに移行することを提案しています.
廃棄されたクラス
次のクラスはAFNetworking 3.0から廃棄されました:AFURLConnectionOperation AFHTTPRequestOperation AFHTTPRequestOperationManager
変更されたクラス
次のクラスは、NSURLConnectionベースのAPIの内部実装を含む.NSURLSessionを使用して再構築されました.
UIImageView+AFNetworking UIWebView+AFNetworking UIButton+AFNetworking
いどう
AFHTTPRequestOperationManagerのコアコード以前にAFHTTPRequestOperationManagerを使用していた場合は、AFHTTPSessionManagerを使用するために移行する必要があります.次のクラスは両方の遷移間で変化しません:securityPolicy requestSerializer responseSerializer
次に、AFHTTPSessionManagerの簡単な例を挙げます.注意HTTPネットワーク要求は、AFHTTPRequestOperationではなく、NSURLSessionTaskに変更され、成功および失敗したBlockブロックのパラメータも、AFHTTPRequestOperationではなくNSURLSessionTaskに変更される.
AFNetworking 2.x
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];[manager GET:@"   url" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
       NSLog(@"  ");
} failure:^(AFHTTPRequestOperation *operation, NSError*error) {
 NSLog(@"  ");
}];

AFNetworking 3.x
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html", nil];
manager.requestSerializer.timeoutInterval =  10;
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
 //get  
if (requestType == RequestTypeGet) {
    [manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
      
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(@"     ");
    }];
    
}

//post  
if (requestType == RequestTypePost) {
    
    [manager POST:url parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
        [self dealWithResponseObject:responseObject cacheUrl:cacheUrl cacheData:cacheData isCache:isCache cache:cache cacheKey:cacheKey success:^(NSDictionary *requestDic, NSString *msg) {
            
        } failure:^(NSString *errorInfo) {
            
        }];
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(@"     ");
    }];
}

//  
if (requestType == RequestTypeUpLoad) {
    [manager POST:url parameters:parameters constructingBodyWithBlock:^(id  _Nonnull formData) {
        NSTimeInterval timeInterVal = [[NSDate date] timeIntervalSince1970];
        NSString * fileName = [NSString stringWithFormat:@"%@.png",@(timeInterVal)];
        [formData appendPartWithFileData:data name:attach fileName:fileName mimeType:@"image/png"];
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        
        
        loadProgress((float)uploadProgress.completedUnitCount/(float)uploadProgress.totalUnitCount);
        
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
       
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingMutableContainers error:nil];
        } failure:^(NSString *errorInfo) {
               failure(errorInfo);
        }];
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(@"     ");
        MCLog(@"        

%@

",error); }]; }

AFNetworking 3.x statusCodeの取得
    [manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
       NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response; 
        NSInteger statusCode = [response statusCode];
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(@"     ");
    }];

個人的な経験ですから、間違いがあれば、訂正してください.