为了学习这些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开发、微信开发等方面的服务的朋友,百恒网络随时为您效劳!