? ? ? ?為了學(xué)習(xí)這些API的用法,我們選擇用MyNotes應(yīng)用案例來做講解,這次數(shù)據(jù)來源是Notes.xml文件。我們首先實(shí)現(xiàn)查詢業(yè)務(wù),查詢業(yè)務(wù)請(qǐng)求可以在主視圖控制器MasterViewController類中實(shí)現(xiàn),MasterView-Controller中的主要相關(guān)代碼如下:
? ? ? ?class MasterViewController: UITableViewController {
? ? ? ?//保存數(shù)據(jù)列表
? ? ? ?var objects = NSMutableArray()
? ? ? ?override func viewDidLoad() {
? ? ? ?......
? ? ? ?self.startRequest() ①
? ? ? ?}
? ? ? ?......
? ? ? ?//開始請(qǐng)求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("請(qǐng)求失敗")
? ? ? ?} else {
? ? ? ?var resDict = NSJSONSerialization.JSONObjectWithData(data,
? ? ? ?options: NSJSONReadingOptions.AllowFragments,
? ? ? ?error: nil) as NSDictionary!
? ? ? ?self.reloadView(resDict) ⑤
? ? ? ?}
? ? ? ?NSLog("請(qǐng)求完成...")
? ? ? ?}
? ? ? ?//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: "錯(cuò)誤信息", 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(@"請(qǐng)求完成...");
? ? ? ?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:@"錯(cuò)誤信息"
? ? ? message:errorStr
? ? ? delegate:nil
? ? ? cancelButtonTitle:@"OK"
? ? ? otherButtonTitles: nil];
? ? ? [alertView show];
? ? ? }
? ? ? }
? ? ? 其中第①行代碼調(diào)用自己的startRequest方法實(shí)現(xiàn)請(qǐng)求Web Service。在startRequest方法中,第②行是指定請(qǐng)求的URL。
? ? ? 第③行代碼使用NSString的stringByAddingPercentEscapesUsingEncoding:方法將字符串轉(zhuǎn)換為URL字符串。
? ? ? 在網(wǎng)上傳輸?shù)臅r(shí)候,URL中不能有中文等特殊字符,比如特殊字符“<”必須進(jìn)行URL編碼才能傳輸,“<”字符的URL編碼是“%3C”。
? ? ? 第④行代碼使用NSURLConnection的sendSynchronousRequest:returningResponse:error:方法進(jìn)行請(qǐng)求,該方法是同步方法,返回值是NSData類型的數(shù)據(jù)。同步方法就是請(qǐng)求過程中線程堵塞到這里,直到Web Service返回應(yīng)答為止。因此,同步方法的用戶體驗(yàn)不好,為了改善用戶體驗(yàn),在iOS 5中增加了可以在其他線程中請(qǐng)求的同步方法。
? ? ? ?第⑤行代碼在請(qǐng)求完成時(shí)調(diào)用reloadView:方法,用于重新加載表視圖中的數(shù)據(jù)。在reloadView:方法中,第
? ? ? ?⑥行代碼用于返回ResultCode。在ResultCode大于等于0時(shí),說明在服務(wù)器端操作成功。
? ? ? ?第⑦行代碼用于取得從服務(wù)器端返回的數(shù)據(jù)。
? ? ? ?從服務(wù)器返回的JSON格式數(shù)據(jù)有兩種情況,一種是成功返回,相關(guān)代碼如下:
? ? ? ?{"ResultCode":0,"Record":[{"ID":1,"CDate":"2012-12-23","Content":
? ? ? ?"這只是一條測(cè)試數(shù)據(jù)"}]}
? ? ? ?另一種是失敗返回,相關(guān)代碼如下:
? ? ? ?{"ResultCode":-1}
? ? ? ?其中ResultCode數(shù)據(jù)項(xiàng)說明調(diào)用Web Service的結(jié)果。為了減少網(wǎng)絡(luò)傳輸,我們只傳遞消息代碼,不傳遞消息內(nèi)容。第⑧行代碼根據(jù)結(jié)果編碼獲得結(jié)果消息,這里使用NSNumber擴(kuò)展技術(shù)(Objective-C中稱為分類),本例中我們定義的NSNumber擴(kuò)展是NSNumber+Message,具體代碼如下:
? ? ? ?import Foundation
? ? ? ?extension NSNumber {
? ? ? ?var errorMessage : String {
? ? ? ?var errorStr = ""
? ? ? ?switch (self) {
? ? ? ?case -7:
? ? ? ?errorStr = "沒有數(shù)據(jù)。"
? ? ? ?case -6:
? ? ? ?errorStr = "日期沒有輸入。"
? ? ? ?case -5:
? ? ? ?errorStr = "內(nèi)容沒有輸入。"
? ? ? ?case -4:
? ? ? ?errorStr = "ID沒有輸入。"
? ? ? ?case -3:
? ? ? ?errorStr = "數(shù)據(jù)訪問失敗。"
? ? ? ?case -2:
? ? ? ?errorStr = "您的賬號(hào)最多能插入10條數(shù)據(jù)。"
? ? ? ?case -1:
? ? ? ?errorStr = "用戶不存在,請(qǐng)到www.51work6.com注冊(cè)。"
? ? ? ?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 = @"沒有數(shù)據(jù)。";
? ? ? ?break;
? ? ? ?case -6:
? ? ? ?errorStr = @"日期沒有輸入。";
? ? ? ?break;
? ? ? ?case -5:
? ? ? ?errorStr = @"內(nèi)容沒有輸入。";
? ? ? ?break;
? ? ? ?case -4:
? ? ? ?errorStr = @"ID沒有輸入。";
? ? ? ?break;
? ? ? ?case -3:
? ? ? ?errorStr = @"數(shù)據(jù)訪問失敗。";
? ? ? ?break;
? ? ? ?case -2:
? ? ? ?errorStr = @"您的賬號(hào)最多能插入10條數(shù)據(jù)。";
? ? ? ?break;
? ? ? ?case -1:
? ? ? ?errorStr = @"用戶不存在,請(qǐng)到http://51work6.com注冊(cè)。";
? ? ? ?default:
? ? ? ?break;
? ? ? ?}
? ? ? ?return errorStr;
? ? ? ?}
? ? ? ?@end
? ? ? ?NSNumber擴(kuò)展中的代碼很簡(jiǎn)單,南昌APP開發(fā)公司小編就不在多做介紹了。這里需要注意的是,如果返回的結(jié)果代碼小于0,說明操作就失敗了。
? ? ? ?以上就是百恒網(wǎng)絡(luò)為大家介紹的關(guān)于IOS同步GET請(qǐng)求的方法,如果大家還有哪些不明白的地方,可隨時(shí)來電和我們聯(lián)系,本公司專業(yè)為您解答。此外,如有需要南昌網(wǎng)站建設(shè)、APP開發(fā)、微信開發(fā)等方面的服務(wù)的朋友,百恒網(wǎng)絡(luò)隨時(shí)為您效勞!