百恒网络
介绍IOS同步GET请求方法
  • 百恒服务
  • APP开发
  • 网页案例
  • 网页知识
  • 关于我们
  • 联系我们
  • 介绍IOS同步GET请求方法

    2017-08-01 15:24:20 3963
           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开发、微信开发等方面的服务的朋友,百恒网络随时为您效劳!
    展开分享
    服务
    案例
    首页
    动态
    联系
    咨询