AFM詳細(ネットワーク状態を検出し、ダウンロードし、アップロードし、データ要求)

25819 ワード

AFM
一、何がAFMですか?http://www.cnblogs.com/worldtraveler/p/4736643.html)
  • は、全称AFNetworkingであり、NSURLConnectionに対する一重パッケージ
  • である。
  • 運転効率はASIほど高くないですが、ASIより簡単に
  • を使います。
  • はiOS開発において広く使われています。
  • AFNのgithubアドレス
  • https://github.com/pokeb/AFNetworking/AFNetworking
  • 二、AFM構造
  • NSURLConnection
  • AFURLConnection
  • AHT TPRequest Operation
  • AHT TPRequest OperationManager(一般的なHTTPメソッドを実装しました)
  • 属性
  • baseURL:AFNは、AHTTPRequest OperationManagerの開発者に対して、一つの例クラスをカスタマイズし、baseURLを設定し、すべてのネットワークアクセスは、相対パスだけで
  • となるよう提案しています。
  • request Serializer:要求データフォーマット/デフォルトはバイナリのHTTP
  • レスポンスSerializer:レスポンスデータフォーマット/デフォルトはJSONフォーマット
  • です。
  • operation Que
  • reachabilityManager:ネットワーク接続マネージャ
  • 方法
  • manager:マネージャを作成するのに便利なクラス方法
  • HTTPRequest Operation WithRequest:サーバにアクセスする時、サーバーにいくつかの追加情報を教えるには、すべてRequestに
  • を設定する必要があります。
  • GET
  • POST
  • NSURLSession
  • AFRURLSessionManager
  • AHT TPSession Manager(一般的なHTTPメソッドを実装しました)
  • GET
  • POST
  • UICKit+AFNetworking分類
  • NSPrograss:KVO
  • を利用する
  • 半自動的なプログレッシブ&アンチプログレッシブ機能
  • AFRURLRequest Serialization:要求されたデータフォーマット/デフォルトはバイナリの
  • です。
  • AFURLResponse Serialization:レスポンスのデータフォーマット/デフォルトはJSONフォーマット
  • です。
  • 付加機能
  • セキュリティポリシー
  • HTTPS
  • AFSecurityPolicy
  • ネットワーク検出
  • は、アップルのネットワーク接続を検出するためのパッケージ
  • を作った。
  • AFNetwork Reachability Manager
  • 三、AFMは基本的に使用します。
    1.AHTTPSession Manager
  • は、AFMにおいて最も重要なオブジェクトの一つである
  • である。
  • は、HTTP要求の一般的な処理
  • をカプセル化する。
  • GET\POST要求
  • 解析サーバの応答データ
  • AHTTPSession Managerを作成します。
    AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
    AHTTPSession ManagerのGET\POST要請
    // GET   /* http://120.25.226.186:32812/login?username=520it&pwd=520it      :       http://120.25.226.186:32812/login      :       username=520it&pwd=520it      :              :             AFN    ,          JSON  ,   AFN    JSON   OC        */ - (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure // POST   - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
    コードの例
    // GET - (void)get2 { // 1.  AFN    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 2.  AFN        NSDictionary *params = @{ @"username" : @"520it", @"pwd" : @"520it" }; [manager GET:@"http://120.25.226.186:32812/login" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"    ---%@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"    ---%@", error); }]; } // POST - (void)post2 { // 1.  AFN    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 2.  AFN        NSDictionary *params = @{ @"username" : @"520it", @"pwd" : @"520it" }; [manager POST:@"http://120.25.226.186:32812/login" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"    ---%@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"    ---%@", error); }]; }
    2.AHTTPRequest OperationManager
    AHTTPrequest OperationManagerを作成します。
    // 1.  AFN    // AFHTTPRequestOperationManager     NSURLConnection AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    AHTTPRequest OperationManagerのGET\POST要求
    // GET - (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure // POST   - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
    コードの例
    - (void)get { // 1.  AFN    // AFHTTPRequestOperationManager     NSURLConnection AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // 2.  AFN        NSDictionary *params = @{ @"username" : @"520it", @"pwd" : @"520it" }; [manager GET:@"http://120.25.226.186:32812/login" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"    ---%@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"    ---%@", error); }]; } - (void)post { // 1.  AFN    // AFHTTPRequestOperationManager     NSURLConnection AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // 2.  AFN        NSDictionary *params = @{ @"username" : @"520it", @"pwd" : @"520it" }; [manager POST:@"http://120.25.226.186:32812/login" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"    ---%@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"    ---%@", error); }]; }
    四、AFMファイルのダウンロード
    //          ,         - (void)downLoadMonitor { // 1.        // AFHTTPSessionManager   NSURLSession AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 2.            NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_02.mp4"]]; /* destination - targetPath:                - block    ,       URL,      URL           completionHandler - url :destination   URL == block       */ /* @property int64_t totalUnitCount;            @property int64_t completedUnitCount;           */ NSProgress *progress = nil; NSURLSessionDownloadTask *downTask = [manager downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSString *path = [cachesPath stringByAppendingPathComponent:response.suggestedFilename]; return [NSURL fileURLWithPath:path]; } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { NSLog(@"%@",filePath.absoluteString); }]; /*      ,     NSProgress,   iOS 7.0    ,          ! NSProgress      !      !-> KVO         ! @property int64_t totalUnitCount;      @property int64_t completedUnitCount;       */ //  Progress     KVO [progress addObserver:self forKeyPath:@"completedUnitCount" options:NSKeyValueObservingOptionNew context:nil]; // 3.     [downTask resume]; } //           - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(NSProgress *)object change:(NSDictionary *)change context:(void *)context { NSLog(@"%f",1.0 * object.completedUnitCount / object.totalUnitCount); //        UI dispatch_async(dispatch_get_main_queue(), ^{ self.progress.progress = 1.0 * object.completedUnitCount / object.totalUnitCount; }); }
    五、AFMプロローグ
  • デフォルトはJSONデータで、受信タイプはJSONです。
  • 受信タイプと戻るタイプが一致しない場合、エラーが発生します。
  •   // 1.  AFN    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //         //      JSON //   AFN,     text/xml     // [AFJSONResponseSerializer serializer].acceptableContentTypes = [NSSet setWithObject:@"text/xml"]; //   AFN       //   AFN   ,         JSON   ,     JSON   // manager.responseSerializer = [AFJSONResponseSerializer serializer]; //   AFN   ,         XML    // manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //   AFN   ,                (           ) manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
    六、AFMファイルアップロード
    // formData:               - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
    AFMアップロードファイルコード例
        // 1.        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 2.            NSDictionary *dict = @{@"username":@"Syl"}; // formData:               [manager POST:@"http://120.25.226.186:32812/upload" parameters:dict constructingBodyWithBlock: ^void(id<AFMultipartFormData> formData) { /* Data:         name:          fileName:      mimeType:       */ UIImage *image =[UIImage imageNamed:@"minion_02"]; NSData *data = UIImagePNGRepresentation(image); [formData appendPartWithFileData:data name:@"file" fileName:@"abc.png" mimeType:@"image/png"]; /* NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/CertificateSigningRequest.certSigningRequest"]; //         MIMEType application/octet-stream // [formData appendPartWithFileURL:url name:@"file" fileName:@"abc.cer" mimeType:@"application/octet-stream" error:nil]; [formData appendPartWithFileURL:url name:@"file" error:nil]; */ } success:^void(NSURLSessionDataTask * task, id responseObject) { //      NSLog(@"     %@", responseObject); } failure:^void(NSURLSessionDataTask * task, NSError * error) { //      NSLog(@"     %@", error); }];
    七、ネットワーク状態を監視する
    1.AFMモニタネットワーク状態
    ネットワーク状態status
    // 2.     /* AFNetworkReachabilityStatusUnknown = -1,     AFNetworkReachabilityStatusNotReachable = 0,     AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G AFNetworkReachabilityStatusReachableViaWiFi = 2, wifi */
    サンプルコード
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    
    //   :         ,         startMonitoring   [manager startMonitoring]; [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"%d", status); }];
    2.Reachability監視ネットワーク状態 は、これらの2つの種類の使用を導入する。
        // 1.  wifi   Reachability *wifi = [Reachability reachabilityForLocalWiFi]; // 2.          (WIFI\3G\2.5G) Reachability *conn = [Reachability reachabilityForInternetConnection]; // 3.       if ([wifi currentReachabilityStatus] != NotReachable) { //  wifi NSLog(@" wifi"); } else if ([conn currentReachabilityStatus] != NotReachable) { //     wifi,              NSLog(@"            "); } else { //      NSLog(@"    "); }
    ①ネットワーク状態の判断
    //  WIFI // [wifi currentReachabilityStatus] != NotReachable // [conn currentReachabilityStatus] != NotReachable //    WIFI,         // [wifi currentReachabilityStatus] == NotReachable // [conn currentReachabilityStatus] != NotReachable //      // [wifi currentReachabilityStatus] == NotReachable // [conn currentReachabilityStatus] == NotReachable
    ②リアルタイム傍受ネットワーク状態
    #import "ViewController.h" #import "Reachability.h" @interface HMViewController () @property (nonatomic, strong) Reachability *conn; @end @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkState) name:kReachabilityChangedNotification object:nil]; self.conn = [Reachability reachabilityForInternetConnection]; [self.conn startNotifier]; } - (void)dealloc { [self.conn stopNotifier]; [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (void)checkNetworkState { // 1.  wifi   Reachability *wifi = [Reachability reachabilityForLocalWiFi]; // 2.          (WIFI\3G\2.5G) Reachability *conn = [Reachability reachabilityForInternetConnection]; // 3.       if ([wifi currentReachabilityStatus] != NotReachable) { //  wifi NSLog(@" wifi"); } else if ([conn currentReachabilityStatus] != NotReachable) { //     wifi,              NSLog(@"            "); } else { //      NSLog(@"    "); } } @end