AFM詳細(ネットワーク状態を検出し、ダウンロードし、アップロードし、データ要求)
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を作成します。
AHTTPrequest OperationManagerを作成します。デフォルトはJSONデータで、受信タイプはJSONです。 受信タイプと戻るタイプが一致しない場合、エラーが発生します。
1.AFMモニタネットワーク状態
ネットワーク状態
一、何がAFMですか?http://www.cnblogs.com/worldtraveler/p/4736643.html)
1.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 OperationManagerAHTTPrequest 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プロローグ // 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