IOSネットワーク処理——AFNetworkingとオリジナルの方法の簡単な使用

9543 ワード

iosはネットワークリクエストを処理し、サードパーティのツールクラスAFNetworkingを使用することが多い.
ログイン時にアカウントを送信してパスワードとバックグラウンドを比較すると、プロセスは以下の通りで、バックグラウンドはjsonを返します.
{"login":{"id":"0001","status":"OK","errorMsg":""}}

以下に使用時の例を示します.
 1 #import "AFNetWorking.h"

 2 

 3 NSString urlLogin = @"www.xxx.com";

 4 //       

 5 AFHTTPRequestOperationManager *requestManager = [[AFHTTPRequestOperationManager alloc] init];

 6 //        text/html 

 7 requestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];

 8 requestManager.requestSerializer.HTTPShouldHandleCookies = YES;

 9 [requestManager GET:urlLogin

10          parameters:nil

11               success:^(AFHTTPRequestOperation *operation, id responseObject) {

12                 NSDictionary *dict = responseObject[@"login"];

13                 NSString *str = [dict objectForKey:@"status"];

14                 NSString *errorMsg = [dict objectForKey:@"errorMsg"];

15                 //

16                 if (str && [str isEqualToString:@"OK"]) {

17                     MSTabBarViewController *tabBar = [[MSTabBarViewController alloc] init];

18                     [self presentViewController:tabBar animated:YES completion:nil];

19                 } else {

20                 //

21                     self.alertView = [[UIAlertView alloc]initWithTitle:@"" message:errorMsg delegate:self cancelButtonTitle:@"cancle" otherButtonTitles:@"ok", nil];

22                     [self.alertView show];

23                 }

24                 

25             } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

26                 NSLog(@"     ");

27             }];

もちろん、AFNetWorkingのファイルを導入することが前提です.
 
上記はフロントがサーバからデータを受け取り、jsonなどのデータをバックグラウンドに転送したい場合です.iosが持参した方法を使ってもいいし、どういうわけかafneetworkingでは伝わらない.
jsonフォーマットは次のとおりです.
{

    "list":

    [

        {"tel":"189XXXXXXX1", "name":""},

        {"tel":"189XXXXXXX2", "name":""},

        {"tel":"189XXXXXXX3", "name":""}

    ]

}

そしてjsonをスペルするときに
-(void)formatAllContacts{    

    NSMutableArray *arr = [[NSMutableArray alloc] init];

    for (ZMOrdinaryContactsModel *ordinary in self.totalContact) {

        NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];

        [dic setObject:ordinary.phoneNum forKey:@"tel"];

        [dic setObject:ordinary.userName forKey:@"name"];

        [arr addObject:dic];

    }

    

    NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:arr,@"list", nil];

    self.contactsToMeetDict = dic1;

}

modelでリクエストを送信するには
- (void)makeRequest:(ZMHomeViewController *)homeController

{

    // 1.    

     NSURL *url = [NSURL URLWithString:@"http:xxx.com"];

     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

     request.HTTPMethod = @"POST";



     // 2.     

     [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];



    //  NSData --> NSDictionary

     // NSDictionary --> NSData

     //homeController.contactsToMeetDict          

     NSData *data = [NSJSONSerialization dataWithJSONObject:homeController.contactsToMeetDict options:NSJSONWritingPrettyPrinted error:nil];

     request.HTTPBody = data;



     // 4.    

     [NSURLConnection sendAsynchronousRequest:request

                                        queue:[NSOperationQueue mainQueue]

                            completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

                                 NSLog(@"  JSON  ");

                             }];

}