介绍IOS同步GET请求方法

       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开发、微信开发等方面的服务的朋友,易速网络随时为您效劳!

提供全面的搜索引擎优化学习交流,专注网站优化和搜索引擎营销推广服务。用专业的SEO技术为企业网站提升关键词排名,让你的网站不仅满足用户体验还要适合搜索引擎优化规则。
易速网站优化公司 » 介绍IOS同步GET请求方法
享更多特权,立即登录下载海量资源
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡