十年专注于网站建设与互联网应用开发,低调、有情怀的网络应用服务商!
南昌百恒科技微信公众号 扫一扫关注
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒科技微信公众号

介绍IOS同步GET请求方法

百恒 2017-08-01 15:24:20 1286
       iOS SDK为HTTP请求提供了同步和异步请求这两种不同的API,而且可以使用GET或POST等请求方法, 今天,南昌APP开发公司-百恒网络先为大家介绍一下比较简单的同步GET请求方法。
       为了学习这些API的用法,我们选择用MyNotes应用案例来做讲解,这次数据来源是Notes.xml文件。我们首先实现查询业务,查询业务请求可以在主视图控制器MasterViewController类中实现,MasterView-Controller中的主要相关代码如下:
       class MasterViewController: UITableViewController {
       //保存数据列表
       var objects = NSMutableArray()
       override func viewDidLoad() {
       ......
       self.startRequest() ①
       }
       ......
       //开始请求Web Service
       func startRequest() {
       var strURL = NSString(format: "http://www.51work6.com/service/mynotes/
       WebService.php?email=%@&type=%@&action=%@", "<你的51work6.com
       用户邮箱>","JSON", "query") ②
       strURL =strURL.stringByAddingPercentEscapesUsingEncoding
       (NSUTF8StringEncoding)! ③
       let url = NSURL(string: strURL)!
       var request = NSURLRequest(URL: url)
       var error: NSError?
       var data = NSURLConnection.sendSynchronousRequest(request,
       returningResponse: nil, error: &error)! ④
       if error != nil {
       NSLog("请求失败")
       } else {
       var resDict = NSJSONSerialization.JSONObjectWithData(data,
       options: NSJSONReadingOptions.AllowFragments,
       error: nil) as NSDictionary!
       self.reloadView(resDict) ⑤
       }
       NSLog("请求完成...")
       }
       //MARK: --处理通知
       func reloadView(res : NSDictionary) {
       let resultCode: NSNumber = res.objectForKey("ResultCode") as
       NSNumber ⑥
       if (resultCode.integerValue >= 0) { //成功
       self.objects = res.objectForKey("Record") as NSMutableArray ⑦
       self.tableView.reloadData()
       } else {
       let errorStr = resultCode.errorMessage ⑧
       let alertView = UIAlertView(title: "错误信息", message: errorStr,
       delegate: nil, cancelButtonTitle: "OK")
       alertView.show()
       }
       }
       }
       //MasterViewController.m文件
       - (void)viewDidLoad
       {
       ......
       [self startRequest]; ①
       }
       -(void)startRequest
       {
       NSString *strURL = [[NSString alloc] initWithFormat:@"JSON",
       @"query"]; ②
       strURL = [strURL stringByAddingPercentEscapesUsingEncoding:
       NSUTF8StringEncoding]; ③
       NSURL *url = [NSURL URLWithString:strURL];
       NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
       NSData *data = [NSURLConnection
       sendSynchronousRequest:request returningResponse:nil
       error:nil]; ④
       NSLog(@"请求完成...");
       NSDictionary *resDict = [NSJSONSerialization
       JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
       [self reloadView:resDict]; ⑤
       }
       //重新加载表视图
       -(void)reloadView:(NSDictionary*)res
       {
       NSNumber *resultCode = [res objectForKey:@"ResultCode"]; ⑥
       if ([resultCode integerValue] >=0)
       {
      self.objects = [res objectForKey:@"Record"]; ⑦
      [self.tableView reloadData];
      } else {
      NSString *errorStr = [resultCode errorMessage]; ⑧
      UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"错误信息"
      message:errorStr
      delegate:nil
      cancelButtonTitle:@"OK"
      otherButtonTitles: nil];
      [alertView show];
      }
      }
      其中第①行代码调用自己的startRequest方法实现请求Web Service。在startRequest方法中,第②行是指定请求的URL。
      第③行代码使用NSString的stringByAddingPercentEscapesUsingEncoding:方法将字符串转换为URL字符串。
      在网上传输的时候,URL中不能有中文等特殊字符,比如特殊字符“<”必须进行URL编码才能传输,“<”字符的URL编码是“%3C”。
      第④行代码使用NSURLConnection的sendSynchronousRequest:returningResponse:error:方法进行请求,该方法是同步方法,返回值是NSData类型的数据。同步方法就是请求过程中线程堵塞到这里,直到Web Service返回应答为止。因此,同步方法的用户体验不好,为了改善用户体验,在iOS 5中增加了可以在其他线程中请求的同步方法。
       第⑤行代码在请求完成时调用reloadView:方法,用于重新加载表视图中的数据。在reloadView:方法中,第
       ⑥行代码用于返回ResultCode。在ResultCode大于等于0时,说明在服务器端操作成功。
       第⑦行代码用于取得从服务器端返回的数据。
       从服务器返回的JSON格式数据有两种情况,一种是成功返回,相关代码如下:
       {"ResultCode":0,"Record":[{"ID":1,"CDate":"2012-12-23","Content":
       "这只是一条测试数据"}]}
       另一种是失败返回,相关代码如下:
       {"ResultCode":-1}
       其中ResultCode数据项说明调用Web Service的结果。为了减少网络传输,我们只传递消息代码,不传递消息内容。第⑧行代码根据结果编码获得结果消息,这里使用NSNumber扩展技术(Objective-C中称为分类),本例中我们定义的NSNumber扩展是NSNumber+Message,具体代码如下:
       import Foundation
       extension NSNumber {
       var errorMessage : String {
       var errorStr = ""
       switch (self) {
       case -7:
       errorStr = "没有数据。"
       case -6:
       errorStr = "日期没有输入。"
       case -5:
       errorStr = "内容没有输入。"
       case -4:
       errorStr = "ID没有输入。"
       case -3:
       errorStr = "数据访问失败。"
       case -2:
       errorStr = "您的账号最多能插入10条数据。"
       case -1:
       errorStr = "用户不存在,请到www.51work6.com注册。"
       default:
       errorStr = ""
       }
       return errorStr
       }
       }

       //NSNumber+Message.h文件
       #import
       @interface NSNumber (Message)
       -(NSString *)errorMessage;
       @end
       //NSNumber+Message.m文件
       @implementation NSNumber (Message)
       -(NSString *)errorMessage
       {
       NSString *errorStr = @"";
       switch ([self integerValue]) {
       case -7:
       errorStr = @"没有数据。";
       break;
       case -6:
       errorStr = @"日期没有输入。";
       break;
       case -5:
       errorStr = @"内容没有输入。";
       break;
       case -4:
       errorStr = @"ID没有输入。";
       break;
       case -3:
       errorStr = @"数据访问失败。";
       break;
       case -2:
       errorStr = @"您的账号最多能插入10条数据。";
       break;
       case -1:
       errorStr = @"用户不存在,请到http://51work6.com注册。";
       default:
       break;
       }
       return errorStr;
       }
       @end
       NSNumber扩展中的代码很简单,南昌APP开发公司小编就不在多做介绍了。这里需要注意的是,如果返回的结果代码小于0,说明操作就失败了。
       以上就是百恒网络为大家介绍的关于IOS同步GET请求的方法,如果大家还有哪些不明白的地方,可随时来电和我们联系,本公司专业为您解答。此外,如有需要南昌网站建设、APP开发、微信开发等方面的服务的朋友,百恒网络随时为您效劳!
400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
备案专线 备案专线
 
售后服务 售后服务
 
×